零到一个关系实体框架

时间:2016-02-04 23:34:31

标签: ef-code-first entity-framework-6 relationship

我正在尝试使用代码第一实体框架创建一对一的关系。使用下面的示例代码,我收到错误消息:

Unable to determine the principal end of an association between the types 'CompanyView' and 'MemberView'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.    

出现此错误,我尝试在配置中添加以修复此错误。

modelBuilder.Entity<CompanyView>().HasOptional(x => x.MemberView).WithOptionalPrincipal(x => x.CompanyView);

最后出现了另一条错误消息。

CompanyView_MemberView_Target: : Multiplicity is not valid in Role 'CompanyView_MemberView_Target' in relationship 'CompanyView_MemberView'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.

任何人都知道这里有什么? 感谢。

public class CompanyView 
{
    [Key]
    public Guid Id { get; private set; }

    public Guid? MemberId { get; private set; }

    [ForeignKey("MemberId")]
    public MemberView MemberView { get; private set; }
}

public class MemberView
{
    [Key]
    public Guid Id { get; private set; }

    public Guid? CompanyId { get; private set; }

    [ForeignKey("CompanyId")]
    public CompanyView CompanyView { get; private set; }
}

我期望的最终结果如下: MemberView可以有0或1个CompanyView,每个CompanyView可以有0到1个MemberView。

1 个答案:

答案 0 :(得分:0)

您指定的关系不常见(两个方向都是一个或零)。您尝试在两个表上创建外键,因为您有不可用的循环。如果一个实体是主体而另一个实体是依赖的,则可以轻松地创建关系1或零。您可以尝试通过多对多关系模拟所需的关系。此外,您不能使用外键属性注释字段,因此您将无法获得某些好处,但您可以自己灵活地手动操作关系。最后,我展示了关系,例如,MemberView是依赖表:

public class CompanyView
{
    [Key]
    public Guid Id { get; private set; }        
    public MemberView MemberView { get; private set; }
}

public class MemberView
{        
    [Key, ForeignKey("CompanyView")]
    public Guid CompanyId { get; private set; }        
    public CompanyView CompanyView { get; private set; }
}