如何在关系一到多EF中正确地从模型中删除实体

时间:2017-11-02 21:09:38

标签: c# .net sql-server entity-framework ef-fluent-api

我必须建模:

public class DeviceType
{
    public int Id { get; set; }

    public string Name { get; set; }
}

public class Device
{
    public int Id { get; set; }

    public string Name { get; set; }

    public int DeviceTypeId { get; set; }

    public DeviceType DeviceType { get; set; }
}

关系一对多。我的fleunt api配置如下所示:

class DeviceConfiguration : EntityTypeConfiguration<Device>
{
    public DeviceConfiguration()
    {
        HasRequired(d => d.DeviceType)
            .WithMany()
            .HasForeignKey(d => d.DeviceTypeId)
            .WillCascadeOnDelete(false);
    }
}

当我删除设备类型时,我不想删除级联我的设备。我想如果在Devices表中没有使用的类型正确删除他,否则如果使用类型抛出异常。在这个配置中一切正常,直到我尝试删除在设备表类型中使用后删除我根本不能删除任何类型 - 总是在SaveChanges中抛出异常。

编辑1 : 例外:

DELETE语句与REFERENCE约束冲突&#34; FK_dbo.Devices_dbo.DeviceTypes_DeviceTypeId&#34;。冲突发生在数据库&#34; xxx&#34;,table&#34; dbo.Devices&#34;,列&#39; DeviceTypeId&#39;中。 声明已经终止。

编辑2 :我理解发生了什么,当我尝试删除在另一个表中使用的实体时,它标记State.Deleted在SaveChangeAsync()中它抛出异常(通常),但是当我尝试删除另一个未在另一个表中使用的实体时,第一个实体保持在State.Deleted和SaveChanges()再次抛出异常。有什么理由解决这个问题?将实体重置为未更改状态?

0 个答案:

没有答案