2015-11-19 20 views
1

我一直在寻找类似的问题,我还没有找到答案。C#实体框架代码优先关系类内的同一类

我想涉及一个人的班,其他2种类型的“人”(爱人和比赛),但我发现了以下错误:

Unable to determine the principal end of an association between the types 'Namespace.Models.Person' and 'Namespace.Models.Person'. 

这里是我的类:

public class Person 
{ 
    public Person() 
    { 

    } 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public Person SignificantOther { get; set; } 
    public Person Match { get; set; } 
} 

我尝试使用外键数据注释,但没有奏效(也许我做错了)。我觉得有一个简单的方法,我只是俯瞰。有任何想法吗?

我先使用代码和LocalDb。

+0

您是否正在从数据库更新模型?或者先做代码?另外,假设你使用SQL Server是安全的吗? – Bardicer

+1

我很确定如何做到这一点在许多其他问题中讨论。你是否尝试搜索实际的错误?无论如何,我认为设计是有缺陷的。一个人只能有一个重要的其他人吗?我认为这是一个0- *关系,也许应用程序可以强制同时拥有一个SO。如果这就是我认为的那样,那么匹配也一样。 – CodeCaster

+0

@尼克 - 好问题,我会更新我的。我正在使用Code First和LocalDb(SQLExpress?) – Tillman32

回答

0

我不得不使用Fluent API,并添加一个可选的重要其他,以及与可选主体匹配。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Person>().HasOptional(p1 => p1.SignificantOther).WithOptionalPrincipal(); 
     modelBuilder.Entity<Person>().HasOptional(m => m.Match).WithOptionalPrincipal(); 
    } 

感谢CodeCaster为我指出了正确的方向!

相关问题