EF Code First,一对多,完全IEnumerable

时间:2013-11-26 18:40:22

标签: c# .net entity-framework ef-code-first

是的,我知道EF不支持IEnumerable,需要使用ICollection。但...

我有两个班级

public class Group
{
    public Guid ID;
    public String Title { get; private set; }

    private readonly List<Student> _students;
    public IEnumerable<Student> Students { get { return _students; } }

    public void AddStudent(Student student)
    {
        if (_students.Any(x => x == student))
            throw new StudentException();

        _students.Add(student);
    }
}

public class Student
{
    public Guid ID;
    public String FirstName { get; private set; }
    public String LastName { get; private set; }
}

这是我的域名图层。 DB层引用了域层。问题是为什么我必须更改DB Layer的域层?当然,我不必。域层不了解DB层。正确?

重要!我不想更改我的DB Layer的域层。那么,我如何通过CodeFirst流畅的api创建表? (一个小组有很多学生,学生有零个或一个小组。)

1 个答案:

答案 0 :(得分:1)

好吧,您可以将DbContext配置为具有不带导航属性的映射。但是,您必须手动填充学生属性。

modelBuilder.Entity<Patient>()
    .HasRequired(s => s.Group)
    .WithMany();

如果你想让它自动填充,你将不得不使用ICollection(你不能吃蛋糕也吃它)。

也许您应该考虑使用接口来编写代码,这样您就不必担心私有集,只读集合等等。类似的东西:

public interface IGroup
{
    Guid ID { get; }
    String Title { get; }

    IEnumerable<IStudent> Students { get; }

    void AddStudent(IStudent student);
}

只是一个建议:)。