2011-10-19 56 views
0

據我所做的關於與Code First定義多對多關係的研究,我猜實體類中的自定義構造函數只是爲了能夠創建一個實體的新實例加上與n:m相關的實體AT ONCE。實體框架 - 代碼首先使用自定義構造函數來建立多對多的關係

在我有我的課是這樣定義的時刻:

public class Person 
{ 
    public Person() 
    { 
     Events = new HashSet<Event>(); 
    } 

    public int PersonId { get; set; } 
    public virtual ICollection<Event> Events { get; set; } 
} 

public class Event 
{ 
    public Event() 
    { 
     Persons = new HashSet<Person>(); 
    } 

    public int EventId { get; set; } 
    public virtual ICollection<Person> Persons { get; set; } 
} 

但是,如果我的應用程序將永遠不會提供創建一個新的事件過程中創建一個新的人的可能性,我可以簡單地忽略自定義構造函數爲事件?

public class Event 
{ 
    public int EventId { get; set; } 
    public virtual ICollection<Person> Persons { get; set; } 
} 

多對多關係還能正常工作嗎?

回答

1

如果這樣做,當您創建新事件並嘗試向其中添加人員時,您將得到NullReferenceException。

var @event = new Event(); 
event.Persons.Add(new Person()); //NullReferenceException here 

這是構造函數初始化集合的唯一原因。

您可以在第一次訪問時在收集者的內部懶散地初始化Persons集合,但是您需要小心多線程。

+0

謝謝!那正是我想知道的! –

相關問題