0

次の(簡略化された)クラスがあります。

public class Person
{
   public string Id {get; set;}  //Ignore the fact that the Id is string -- legacy system
   public string Firstname {get; set;}
   public ICollection<Member> Memberships {get; set;}
   ...
}

public class Account
{
   public string Id {get; set;}
   public string AccountType {get; set;}
   ...
}

public class Member
{
   public string AccountNumber {get; set;}
   public string PersonNumber {get; set;}
   public Account Account {get; set;}
   public Person Person {get; set;}
   ...
 }

および次の EF 構成:

//In Accounts configuration class
ToTable("missacct");
HasKey(a => a.Id);

//In Members Configuration class
ToTable("members");
HasKey(a => new { a.AccountNumber, a.PersonNumber});
HasRequired(a => a.Person).WithMany().HasForeignKey(p => p.PersonNumber);
HasRequired(a => a.Account).WithMany().HasForeignKey(a => a.AccountNumber);

//In Persons Configuration Class
ToTable("person");
HasKey(p => p.Id);
HasMany(p => p.Memberships).WithOptional().HasForeignKey(p => p.PersonNumber);

ここでの意図は、人物とアカウントが存在することです。アカウントはメンバーなしでは存在できず、メンバーは常に個人です。しかし、人はアカウントのメンバーでなくても存在できます。

アイデアは、次のクエリを実行できるようにすることです。

  1. 特定の口座番号を指定すると、その口座のすべての人を見つけたいと思います。
  2. 名と姓の組み合わせを指定して、名前が一致するすべての人物と、その人物がメンバーである可能性のあるアカウントを検索したいと考えています。

私が持っているものは現在機能していないようです。循環参照エラーが発生していますが、どこが間違っているのかよくわかりません。

ご協力いただきありがとうございます。

4

1 に答える 1

0

1 つの双方向の関係ではなく、2 つの別個の関係を定義しています。これを試して:

//In Accounts configuration class
ToTable("missacct");
HasKey(a => a.Id);

//In Members Configuration class
ToTable("members");
HasKey(a => new { a.AccountNumber, a.PersonNumber});
HasRequired(m => m.Person).WithMany(p => p.Memberships).HasForeignKey(p => p.PersonNumber);
HasRequired(m => m.Account).WithMany().HasForeignKey(a => a.AccountNumber);

//In Persons Configuration Class
ToTable("person");
HasKey(p => p.Id);
HasMany(p => p.Memberships).WithOptional(m => m.Person).HasForeignKey(p => p.PersonNumber);

アカウントはメンバーなしでは存在できません...

アプリケーションロジックでこの部分を強制する必要があります。関係レベルでは、メンバーがアカウントを持っている必要があるとしか言えません。

于 2012-05-18T09:19:26.077 に答える