我有两个实体:人员和公司。一个公司有一个或多个联系人(人)。一家公司至少有一个主要联系人(人)。什么是实施这个最好的方法?EF 5 Code First:两个实体之间的一对一和一对多关联
这里是实体:
public class Person
{
public int PersonId { get; set; }
public string PersonName { get; set; }
}
public class Company
{
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public virtual ICollection<Person> Contacts { get; set; }
public int PrimaryContactId { get; set; }
[ForeignKey("PrimaryContactId")]
public virtual Person PrimaryConctact { get; set; }
}
上下文和初始化器:
public class TolleContext : DbContext
{
public DbSet<Company> Companies { get; set; }
public DbSet<Person> Persons { get; set; }
public TolleContext()
{
Database.SetInitializer(new TolleContextInitializer());
}
}
public class TolleContextInitializer : DropCreateDatabaseAlways<TolleContext>
{
protected override void Seed(TolleContext context)
{
var p1 = context.Persons.Add(new Person { PersonName = "Anatoly" });
var p2 = context.Persons.Add(new Person { PersonName = "Johannes" });
var contacts = new List<Person> {p1, p2};
var company = new Company
{
CompanyName = "Bool",
PrimaryConctact = p1,
Contacts = contacts
};
context.Companies.Add(company);
context.SaveChanges();
base.Seed(context);
}
}
如果我一个人作为一个PrimaryContact
的公司联系起来,它不出现在company.Contacts。当我一个人作为主要联系人相关联,并加入到为同一家公司的联系人列表,它抛出一个错误:
Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.
我希望有关实现这样的场景可能的方式回答。
您的类图有点误导,您有'Company.Contacts',但您的关系线表示它是1对1的关系。一家公司只能有一个联系人和一个主要联系人? – CodingGorilla 2013-02-08 16:25:36
为什么你将PrimaryContact分离出来而不是Person上的字段? – IronMan84 2013-02-08 16:43:54
谢谢@CodingGorilla和IronMan84我已经更新了类图。我将尝试将PrimaryContact关联作为Person上的字段。 – 2013-02-08 17:00:23