繁体   English   中英

EF仅需多个外键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM