我有以下(简化)课程:
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);
这里的意图是有人和帐户。没有成员就不能存在帐户,而成员永远是个人。但是,一个人可以在不成为帐户成员的情况下存在。
我的想法是希望能够查询以下内容:
我现在所用的东西似乎没有用。我收到循环引用错误,但我不太确定我哪里出错了。
感谢您提供的任何帮助!
答案 0 :(得分: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);
如果没有成员,帐户就不能存在......
您必须在应用程序逻辑中强制执行此部分。在关系级别,您只能说会员必须拥有一个帐户。