Я пытаюсь реализовать два DbContexts, которые сопоставляются с двумя отдельными схемами/базами данных в MySql с внешним ключом между ними.Entity Framework Несколько DbContexts с несколькими схемами MySql
Я понимаю вопросы, подобные этим было предложено раньше, но я не могу найти ответ в отношении MySql
Я использую код первой, но и я получаю следующее сообщение об ошибке, когда я Обновление базы данных:
MultipleDbContext.ApplicationUser:: EntityType 'ApplicationUser' не имеет определяемого ключа. Определите ключ для этого EntityType.
ApplicationUsers: EntityType: EntitySet 'ApplicationUsers' основан на типе «ApplicationUser», который не имеет определенных ключей.
Это мои 2 DbContexts:
ApplicationDbContext
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext() : base("ApplicationDBContext") {}
public DbSet<Application> Applications { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new ApplicationConfiguration());
}
}
public class ApplicationConfiguration : EntityTypeConfiguration<Application>
{
public ApplicationConfiguration()
{
HasKey(x => x.ApplicationID);
Property(x => x.ApplicationID).IsRequired();
Property(x => x.ApplicationName).IsRequired();
HasRequired(x => x.PrimaryUser).WithMany().HasForeignKey(x => x.UserID);
}
}
ApplicationUserDbContext
public class ApplicationUserDbContext : DbContext
{
public ApplicationUserDbContext() : base("UserDBContext") {}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ApplicationUserConfiguration());
}
}
public class ApplicationUserConfiguration : EntityTypeConfiguration<ApplicationUser>
{
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public ApplicationUserConfiguration()
{
HasKey(x => x.UserID);
Property(x => x.UserID).IsRequired();
Property(x => x.Name).IsRequired();
}
}
Это мое заявление обновление базы:
обновление базы данных--ConfigurationTypeName MultipleDbContext.Migrations.Configuration
Спасибо!
EDIT - Добавление Entity объектов
public class Application
{
public int ApplicationID { get; set; }
public string ApplicationName { get; set; }
public int UserID { get; set; }
public virtual ApplicationUser PrimaryUser { get; set; }
}
public class ApplicationUser
{
public int UserID { get; set; }
public string Name { get; set; }
}
Спасибо за ответ, но я использую Int как для первичных ключей. Я не использую Identity, я просто назвал объекты похожими именами. – SkelDave
Ах, я пропустил часть, которую вы разделили на два разных соединения с базой данных. Просто невозможно, чтобы один контекст соединял запрос с другим контекстом. То, что вы, по сути дела, выполняете с помощью сопоставления внешнего ключа, - это 'select * from Application app join Присоединиться к User on App.X = User.Y' в * одном одном запросе *.Ты не можешь – mschr