实体框架代码第一个到一个级联删除

时间:2019-06-21 18:22:04

标签: c# entity-framework

具有其他模型(“员工”和“客户”)的“地址”和“地址”模型。
我将这种关系称为一对一关系,我可能是错的。这两个其他模型都需要该地址。删除,仅删除父对象。

在EF Core和EF6中都进行了尝试。删除将删除父对象,而不是“地址”对象。

public class Address
{
    public int AddressID { get; set; }
    public string Street { get; set; }
    public string CityStateZip { get; set; }
}
public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]
    public virtual Address EmployeeAddress { get; set; }
}
public class Client
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]
    public virtual Address ClientAddress { get; set; }
}

没有错误消息-context.remove不会删除子对象。关于EF,请在此处完成菜鸟。抱歉,这可能是一个非常基本的问题,但是请相信我已经进行了广泛的搜索。大多数解决方案都建议将外键返回给父对象-但是,在这种情况下,可以在几种不同的模型中使用(但不能共享)子对象。

1 个答案:

答案 0 :(得分:0)

相同的Address对象可以在当前实施的多个Employee和/或Client实例中使​​用。

您收到的建议

  

大多数解决方案都建议将外键返回给父对象-但是,在这种情况下,可以在几种不同的模型中使用(但不能共享)子对象。

通知实体框架,给定地址只能出现在一个特定的员工/客户中。

您应该能够通过让Employee和Client继承一个通用基类来解决此问题,例如

public class Person
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    [Required]
    public virtual Address PersonAddress { get; set; }
}

public class Employee : Person
{
    // Other properties that make Employee unique go here
}

public class Client : Person
{
    // Other properties that make Client unique go here
}

然后将反向引用添加到基类

public class Address
{
    public virtual int AddressID { get; set; }
    public virtual string Street { get; set; }
    public virtual string CityStateZip { get; set; }
    [Required]
    public virtual Person AddressOf { get; set; }
}
相关问题