Entity Framework 4.1: свойство навигации "BusinessUser", объявленное для типа "Login", настроено с конфликтующими кратностями



У меня есть две сущности



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

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


Отношение между BusinessUser и Login равноодин к нулю/один .



У меня есть следующие конфигурации
В классе конфигурации BusinessUser EF



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


В классе конфигурации Login EF



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


Я получаю следующее исключение




Настроено свойство навигации 'BusinessUser', объявленное по типу 'Login'.
с противоречивыми множествами.




Где я ошибаюсь с моим конфигурация один-к-одному / ноль в коде EF 4.1 первая.



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


Также я ищу двунаправленный.

657   2  

2 ответов:

Ваш бизнес-пользователь должен иметь отношение, настроенное следующим образом:

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

Обе конфигурации должны быть одинаковыми (на самом деле требуется только одна), и первая конфигурация неверна, потому что она пытается определить 0..1 - 0..1 отношение.

Как вы структурировали свои занятия ? Вот пример с отношением один к одному/ноль, определенным. В результате получается:

  • BusinessUser { Id (PK), Name,...}
  • Логин { BusinessUserID (PK, FK), электронная почта, пароль и т. д...}

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

Здесь находится DbContext и инициализатор



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

Comments

    Ничего не найдено.