Entity Framework 4.1 : The navigation property 'BusinessUser' declared on type 'Login' has been configured with conflicting multiplicities

我的未来我决定 提交于 2019-12-20 02:43:24

问题


I am having two entities

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

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

Relationship between BusinessUser and Login is one-to-zero/one.

I am having following configurations In BusinessUser EF configuration class

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

In Login EF configuration class

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

I am getting following exception

The navigation property 'BusinessUser' declared on type 'Login' has been configured with conflicting multiplicities.

Where I am wrong with my one-to-one/zero configuration in EF 4.1 code first.

Update 1 : Following are my class structure

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; }
  }

Also I am looking for bi-directional.


回答1:


Your BusinessUser must have relation configured as:

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

Both configuration must be same (actually only one is needed) and the first configuration is incorrect because it is trying to define 0..1 - 0..1 relation.




回答2:


How have you structured your classes ? Here's a sample with a relationship one-to-one/zero defined. The result is :

  • BusinessUser { Id(PK), Name,...}
  • Login { BusinessUserID(PK, FK), Email, Password, etc...}

    
    public class BusinessUser
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public virtual LoginInfo LoginInfo { get; set; }
    } 
    
    

    public class LoginInfo { public int BusinessUserId { get; set; } public virtual BusinessUser BusinessUser { get; set; } public string Username { get; set; } public string Password { get; set; } }

Here is the DbContext and the Initializer



public class MyContext : DbContext
{

    public DbSet<BusinessUser> BusinessUsers { get; set; }
    public DbSet<LoginInfo> LoginInfos { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        //We define the key for the LoginInfo table
        modelBuilder.Entity<LoginInfo>().HasKey(x => x.BusinessUserId);
        modelBuilder.Entity<LoginInfo>().HasRequired(bu => bu.BusinessUser);
    }
}

public class MyInitializer : DropCreateDatabaseIfModelChanges<MyContext>
{
    protected override void Seed(MyContext context)
    {
        var businessUser = new BusinessUser();
        businessUser.Email = "mymail@email.com";
        businessUser.Name = "My Name";
        businessUser.LoginInfo = new LoginInfo(){Username = "myusername", Password ="mypassword"};
        context.BusinessUsers.Add(businessUser);
        context.SaveChanges();
    }
}



来源:https://stackoverflow.com/questions/8772149/entity-framework-4-1-the-navigation-property-businessuser-declared-on-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!