实体框架4.1:使用一对一/零映射配置的导航属性

时间:2012-01-08 10:51:28

标签: entity-framework orm entity-framework-4.1 ef-code-first

  

可能重复:
  Entity Framework 4.1 : The navigation property ‘BusinessUser’ declared on type ‘Login’ has been configured with conflicting multiplicities

我有两个实体

BusinessUser { Id(PK), Name,...}

Login { BusinessUserID(PK, FK), Email, Password, etc...}

BusinessUserLogin之间的关系为一对一/一

我正在进行以下配置 在BusinessUser EF配置类

this.HasOptional(bu => bu.LoginInfo)
    .WithOptionalPrincipal(l => l.BusinessUser);

在登录EF配置类

this.HasRequired(l => l.BusinessUser)
    .WithOptional(bu => bu.LoginInfo);

我遇到了异常

  

已配置在“登录”类型上声明的导航属性“BusinessUser”   具有相互冲突的多重性。

我首先在EF 4.1代码中使用一对一/零配置错误。

public class BusinessUser {
    public virtual int ID { get; set; }

    public virtual int BusinessID { get; set; }

    public virtual Business Business { get; set; }

    public Login LoginInfo { get; set; }
  }

 public class Login {
    public virtual int BusinessUserID { get; set; }

    public virtual string Email { get; set; }

    public virtual string Password { get; set; }

    public BUsinessUser BusinessUserInfo { get; set; }
  }

我也在寻找双向的。

1 个答案:

答案 0 :(得分:4)

您需要从BusinessUser配置中删除以下映射。

this.HasOptional(bu => bu.LoginInfo)
    .WithOptionalPrincipal(l => l.BusinessUser);

在单一配置中配置关系就足够了。如果您需要从BusinessUser配置映射,可以按照以下步骤进行映射。

this.HasOptional(bu => bu.LoginInfo)
    .WithRequired(l => l.BusinessUser);