DbSet.Add忽略未设置的属性

时间:2017-07-26 01:41:37

标签: c# asp.net entity-framework .net-core entity-framework-core

使用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语句中添加这个字段,即使它没有设置,所以有什么方法可以避免这种情况吗?

1 个答案:

答案 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
}