我通过实体框架将新实体插入到数据库中,设置所有属性,但代码仍然抛出带有文本的SqlException:
无法将值NULL插入列C_CUSTKEY,表y;列不允许空值。
但我手动设置了所有属性,它们不是null。什么可能导致这个问题?
代码:
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; }
}
答案 0 :(得分:2)
请按以下方式装饰Customer
实体的主键属性:
[DataMember, Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int C_CUSTKEY { get; set; }
这里的关键是放置属性:
- Key
- DatabaseGenerated
醇>到C_CUSTKEY列。显然我们正在争论的问题是 默认情况下,Entity Framework希望执行带有键的插入 身份。
答案 1 :(得分:0)
您是否更新了EDMX型号?
如果还没有,Entity Framework无法知道您是否更改了数据库列属性。如果打开模型并右键单击并选择“从数据库更新模型”,然后按“完成”,则应该完成工作。
此外,您可以检查是否有一些未在数据库中指定为增量标识列的主键,并且您没有在代码上设置任何值。