具有其他模型(“员工”和“客户”)的“地址”和“地址”模型。
我将这种关系称为一对一关系,我可能是错的。这两个其他模型都需要该地址。删除,仅删除父对象。
在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,请在此处完成菜鸟。抱歉,这可能是一个非常基本的问题,但是请相信我已经进行了广泛的搜索。大多数解决方案都建议将外键返回给父对象-但是,在这种情况下,可以在几种不同的模型中使用(但不能共享)子对象。
答案 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; }
}