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; }
}
Также я ищу двунаправленный.
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