我已經通過StackOverflow上的幾個線程讀過,但一直沒能弄清楚。我希望有人能提供一些建議。我有一些看起來像這樣的POCO類:自我相關的外部參照表的代碼第一映射
Person
{
int PersonCode {get; set;}
...
virtual List<PersonContact> {get; set;}
}
PersonContact
{
int PersonPersonCode {get; set;}
int ContactPersonCode {get; set;}
int PersonContactTypeCode {get; set;}
virtual PersonContactType {get; set;}
virtual Person Person {get; set;} // not sure I really need this one
virtual Person Contact {get; set;}
}
每個人記錄將有零到許多PersonContact記錄。每個PersonContact記錄都將一個Person記錄鏈接到另一個Person記錄,並使用PersonContactTypeCode指示兩個Person記錄之間的關係類型。
我需要能夠映射這個,以便一個人記錄可以導航到他的相關PersonContact記錄。事情是這樣的:
var john = new Person(...);
var david = new Person(...);
john.PersonContacts.Add(new PersonContact
{
Contact = david,
PersonContactType = ... // manager
});
然後
john.PersonContacts
.Where(c => c.PersonContactType.PersonContactTypeCode == "manager")
.FirstOrDefault();
將返回
david
我都試過,我也很難記得在那裏我開始數據註釋的這麼多的組合和流利的API。我似乎有這種組合的好運:
modelBuilder.Entity<Person>()
.HasMany(entity => entity.PersonContacts)
.WithRequired(person => person.Person)
.HasForeignKey(xref => xref.PersonPersonCode)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Person>()
.HasMany(entity => entity.PersonContacts)
.WithRequired(xref => xref.Contact)
.HasForeignKey(entity => entity.ContactPersonCode)
.WillCascadeOnDelete(false);
但是,當我嘗試不止一個PersonContact添加到一個人,我得到這個錯誤:
Multiplicity constraint violated. The role 'Person_PersonContacts_Source' of the
relationship '...Entities.Person_PersonContacts' has multiplicity
1 or 0..1.
我真的很感謝所有幫助,我現在完全陷入困境。順便說一下,如有必要,我願意改變這些POCO。
明天當我回到辦公室時,我會試試這個,我會讓你知道它是如何運行的。 – 2013-04-09 02:01:44
我對這個解決方案做了一些小改動。它的工作,謝謝你! – 2013-04-10 13:28:03
微小的變化是什麼? – 2013-08-05 11:27:55