【发布时间】:2017-04-14 07:44:34
【问题描述】:
我正在通过实体框架将新实体插入数据库,设置所有属性,但代码仍然向我抛出带有文本的 SqlException:
无法将值 NULL 插入 C_CUSTKEY 列,表 y;列不允许空值。
但我手动设置了所有属性,它们不为空。什么会导致这个问题?
代码:
maxCustomerId = db.Customers.Max(o => o.C_CUSTKEY) + 1;
var customer = new Customer
{
C_CUSTKEY = maxCustomerId,
C_NATIONKEY = 1,
C_NAME = "Peter",
C_ADDRESS = "Praha",
C_COMMENT = "Best customer",
C_ACCTBAL = 0,
C_PHONE = "12345"
};
db.Customers.Add(customer);
db.SaveChanges();
这是我的客户实体:
public class Customer
{
[Key]
public int C_CUSTKEY { get; set; }
public string C_NAME { get; set; }
public string C_ADDRESS { get; set; }
public int C_NATIONKEY { get; set; }
[ForeignKey("C_NATIONKEY")]
public virtual Nation Nation { get; set; }
public string C_PHONE { get; set; }
public decimal C_ACCTBAL { get; set; }
public string C_COMMENT { get; set; }
}
国家实体:
public class Nation
{
[Key]
public int N_NATIONKEY { get; set; }
public string N_NAME { get; set; }
public int N_REGIONKEY { get; set; }
[ForeignKey("N_REGIONKEY")]
public virtual Region Region { get; set; }
public string N_COMMENT { get; set; }
}
区域实体:
public class Region
{
[Key]
public int R_REGIONKEY { get; set; }
public string R_NAME { get; set; }
public string R_COMMENT { get; set; }
}
【问题讨论】:
-
请在您的问题中发布您的代码,以便我们查看问题所在..
-
您知道这样做
SELECT MAX(...) + 1来获取您的新唯一 主键非常糟糕?在一个有几个并发用户的繁忙系统中,您迟早会有重复的值 - 这对于主键不是是件好事! -
这只是我测试缓存的项目,我不以任何并发方式使用这个数据库。我是唯一可以访问此数据库的人。
标签: c# entity-framework ef-code-first sqlexception