我已经阅读了 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;}
}
每个 Person 记录将有零到多个 PersonContact 记录。每个 PersonContact 记录将一个 Person 记录链接到另一个 Person 记录,并使用 PersonContactTypeCode 指示两个 Person 记录之间的关系类型。
我需要能够对此进行映射,以便可以将 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
我已经尝试过很多 Data Annotations 和 Fluent 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。