使用EFCore,模型有一个带有外键约束的表,它引用另一个表,但此列是可以为空的。像这样的模型:
public class Order
{
[Key]
public int Id { get; set; }
public int Code { get; set; }
public int Amount { get; set; }
... // other fields
}
public class OrderCode
{
[Key]
public int Id { get; set; }
public int Code { get; set; }
public string Description { get; set; }
}
Order o = new Order { Amount = 1 }; // Code is not set and default NULL in DB
orders.Add(o);
db.SaveChanges(); // failure
因此,在某些情况下,Code
为空,在数据库中为默认NULL
,但是当我通过DbSet.Add
添加对象时,它会引发异常:
Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时发生错误。有关详细信息,请参阅内部异常---> System.Data.SqlClient.SqlException:INSERT语句与FOREIGN KEY约束“FK_Orders_Code”冲突。冲突发生在数据库“Store”,表“dbo.OrderCode”,列'Id'。
看起来EFCore会尝试在insert语句中添加这个字段,即使它没有设置,所以有什么方法可以避免这种情况吗?
答案 0 :(得分:1)
我认为你应该使用int?对于您的模型中的代码。 int的默认值为0,因此实体框架为Code字段设置了它。
public class Order
{
[Key]
public int Id { get; set; }
public int? Code { get; set; }
public int Amount { get; set; }
... // other fields
}