Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 227
Mahesh Avatar asked Nov 18 '25 06:11

Mahesh


2 Answers

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.

like image 173
Ladislav Mrnka Avatar answered Nov 19 '25 20:11

Ladislav Mrnka


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 = "[email protected]";
        businessUser.Name = "My Name";
        businessUser.LoginInfo = new LoginInfo(){Username = "myusername", Password ="mypassword"};
        context.BusinessUsers.Add(businessUser);
        context.SaveChanges();
    }
}

like image 45
Giorgio Minardi Avatar answered Nov 19 '25 20:11

Giorgio Minardi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!