我正在寻找关于保持与实体框架保持一致的C#POCO之间的双向关系的最佳实践。

一个家庭有零到多个家庭成员,一个人总是有一个家庭。现在,当我实例化一个新的人和一个新的家庭时:

Person john = new Person();
Family adams = new Family();


然后,我将该人添加到家庭中,反之亦然。这需要:

adams.familyMembers.Add(john);
john.family = adams;


我想知道是否有更好的方法可以这样做,因为如果我将一个人添加到家庭中,则应始终将该人的家庭财产设置为该家庭。如果开发人员忘记执行此操作,则最终将得到孤立对象。

我是否使用完整的getter和setter来做到这一点?有一些自动的方法可以做到这一点吗?

使用实体框架存储这些对象时,有什么特别的注意事项吗?



提前致谢

最佳答案

不管您是否设置其他方向,实体框架都不会在意,它仍会正确保存。但是,在使用域模型时,您可能希望立即访问两个导航属性。这需要在执行操作时设置属性。我用于几乎所有导航集合的解决方案如下

public class Family
{
    public Family()
    {
        this.FamilyMembers = new List<Person>();
    }
    public IEnumerable<Person> FamilyMembers {get; protected set;}

    public void AddFamilyMember(Person person)
    {
        this.FamilyMembers.Add(person);
        person.Family = this;
    }
}

关于c# - 在双向关系和 Entity Framework 中保持完整性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17702841/

10-13 09:37