Невозможно добавить контроллер (с скаффолдингом) ASP.NET MVC

Это было рассмотрено во многих других вопросах, но, увы, я пробовал все решения, опубликованные там, но безуспешно. Я разрабатываю приложение 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 в любом случае просто вызывает для него базовый конструктор, поэтому я не понимаю, как это может быть большой проблемой.

Любая помощь горячо приветствуется. Спасибо!


person user1058854    schedule 03.06.2014    source источник


Ответы (1)


Вы не сопоставили сущность работодателя с моделью. Вот почему компилятор не может получить метаданные для работодателя. Во-первых, добавьте DbSet, как показано ниже, и дайте мне знать, если это работает.

public DbSet<Client> Clients { get; set; }
public DbSet<Organization> Organizations { get; set; }
public DbSet<Employer> Employers { get; set; }
person magos    schedule 04.06.2014
comment
Хотя это хороший момент, это не было причиной проблемы. Visual Studio также отказывалась позволить мне добавить контроллер для Client. Что в конечном итоге исправило это для меня, так это закомментировать строку: [DbConfigurationType(typeof(MySqlEFConfiguration))], а также конструктор для MyDataContext - person user1058854; 05.06.2014