2013-11-26 36 views
0

是的,我知道EF不支持IEnumerable並需要使用ICollection。但是......EF CodeFirst,一對多,完全IEnumerable

我有兩個類

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; } 
} 

這是我的領域層。數據庫層具有對領域層的引用。問題是爲什麼我必須更改我的領域層的數據庫層?當然,我不是必須的。域層不知道數據庫層。對?

重要!我不想爲數據庫層更改我的域層。那麼,我怎樣才能通過CodeFirst流利的API創建表? (一組有很多學生,學生有零組或一組)。

回答

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); 
} 

只是一個建議,雖然:)。

+0

謝謝你的回答!我認爲配置一個沒有導航屬性的映射對我來說是個好主意。但我不知道該怎麼做。學生類型沒有組屬性。 – DmitryBLR

+0

我沒注意到......你只需要一些外鍵。這是要麼添加一個外鍵到組或添加學生ICollection ..對不起:(: – LueTm

+1

我已經考慮過我的模型了一次,我添加了組屬性到學生類,所以再次感謝你 – DmitryBLR