[英]EF Multiple foreign keys only 1 required
我有一个实体,它为许多不同的实体定义属性。
例如。
class user{
ICollection<PropertyEntity> properties {get;set;}
}
class company{
ICollection<PropertyEntity> properties {get;set;}
}
当我从用户或公司中删除PropertyEntity时。
myUser.properties.Remove(someProperty);
PropertyEntity不会被删除,只是将其外键设置为null。
我知道我可以只使用[Key]批注定义外键。 但是大概这将需要两个密钥而不是两个密钥?
我如何获得EF来构建该关系,以便用户或公司可以具有许多PropertyEntity。 但是,如果PropertyEntity没有用户或公司,则会将其删除?
如果该关系是可选的,则无法定义该关系,以便从导航集合中删除子项也将其从数据库中删除。
您必须调用DbSet<T>.Remove
。为孩子DbSet<T>.Remove
...
myUser.properties.Remove(someProperty);
if (!someProperty.CompanyId.HasValue)
context.PropertyEntities.Remove(someProperty);
...(这也会自动从集合中删除该子项),或者您可以在提交更改之前尝试删除覆盖的SaveChanges
中的“孤立”子项:
public override int SaveChanges()
{
PropertyEntities.Local
.Where(p => !p.UserId.HasValue && !p.CompanyId.HasValue)
.ToList()
.ForEach(p => PropertyEntities.Remove(p));
return base.SaveChanges();
}
Arthur Vickers的博客上对此方法进行了更详细的说明。
确实只有在需要这种关系的情况下,才可能建立标识关系 (这将支持在从导航集合中删除该子项时将其从数据库中删除),因此这不是您的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.