Это было рассмотрено во многих других вопросах, но, увы, я пробовал все решения, опубликованные там, но безуспешно. Я разрабатываю приложение ASP.NET MVC, используя Code-First EF. Я пытаюсь использовать встроенные леса, чтобы он мог автоматически создавать для меня контроллер на основе моей модели и DbContext. Однако я получаю следующую ошибку, когда пытаюсь создать контроллер таким образом:
'Unable to retrieve metadata for Employer.' Using the same DbCompiledModel to create contexts against different types of database servers is not supported. Instead, create a separate DbCompiledModel for each type of server being used.
Далее следует код для моей модели, работодателя, моего DbContext, MyDataContext и моего файла web.config:
//Employer.cs
public class Employer : Organization, IEmployer
{
public virtual PhysicalAddress Address { get; set; }
public virtual ICollection<ContactMethod> ContactMethods { get; set; }
public int FederalTaxID { get; set; }
public virtual Client Client { get; set; }
}
-
//MyDataContext.cs
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class MyDataContext : IdentityDbContext<ApplicationUser>
{
public MyDataContext()
: base("DataConnection")
{
}
static MyDataContext()
{
Database.SetInitializer(new DataInitializer());
}
public DbSet<Client> Clients { get; set; }
public DbSet<Organization> Organizations { get; set; } // Store Employer and OrgEntity
/// <summary>
/// Sets up unclear relationships between entities before the models are constructued in a database.
/// For example, models which extend other models must have their Ids mapped (because it is an
/// inherited member, and so is not found by Entity Framework by default)
/// </summary>
/// <param name="modelBuilder">the object responsible for constructing the database from code-first</param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//set up parent organization relationship
modelBuilder.Entity<Organization>()
.HasOptional(n => n.ParentOrganization)
.WithMany(o => o.ChildOrganizations)
.Map(m => m.MapKey("ParentOrganization_Id"));
//set up the organization-employee assignment
modelBuilder.Entity<Employee>()
.HasOptional(a => a.OrganizationAssignment)
.WithMany(a => a.Employees);
//used to integrate Identity stuff into same db as Clients, etc.
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
}
-
<!--web.config-->
.
.
.
<connectionStrings>
<add name="DataConnection"
providerName="Mysql.Data.MysqlClient"
connectionString="server=localhost;user id=myid;password=mypass;persistsecurityinfo=True;database=app_db"/>
</connectionStrings>
.
.
.
Из различных других сообщений, таких как этот, этот и этот. Я пробовал много разных вещей, чтобы заставить его работать. Это включает в себя закомментирование моего конструктора для MyDbContext
, изменение атрибута providerName
моей строки подключения на "System.Data.SqlClient"
, изменение имени строки подключения на "DefaultConnection"
, полное удаление моих строк подключения и комбинации всех этих вещей. Я обязательно перестраиваю между попытками добавить контроллер. Однако после выполнения этих различных изменений я все еще получаю ту же ошибку, когда пытаюсь добавить новый контроллер.
Как правило, я могу найти ответы на все свои вопросы, но ответы, похоже, не работают для меня в этом вопросе. Я думаю, что мой случай может отличаться от связанных, так это то, что мой DbContext
на самом деле является экземпляром IdentityDbContext
. Я считаю, что конструктор для IdentityDbContext
в любом случае просто вызывает для него базовый конструктор, поэтому я не понимаю, как это может быть большой проблемой.
Любая помощь горячо приветствуется. Спасибо!