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 レコードは、1 つの Person レコードを別の 1 つの Person レコードにリンクし、2 つの 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
データ注釈と 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 を Person に追加しようとすると、次のエラーが発生します。
Multiplicity constraint violated. The role 'Person_PersonContacts_Source' of the
relationship '...Entities.Person_PersonContacts' has multiplicity
1 or 0..1.
どんな助けにも本当に感謝しています。私は今完全に困惑しています。ちなみに、私は必要に応じてこれらの POCO を変更することにオープンです。