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

您正在定义两个单独的关系,而不是一个双向关系。试试这个:

//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 回答