DbContext не является конструктивным

asp.net-mvc-5 c# dbcontext entity-framework-6

Вопрос

Я только начал играть с MVC5, уже имея достаточное количество воздействия на MVC4.

Во-первых, я решил вызвать ApplicationUser в своем приложении UserProfile (так что UserProfile наследуется от IdentityUser). Я также хочу иметь один DbContext, поэтому отношения между UserProfile и другими объектами легко используются. Эта ошибка возникает с строкой соединения или без нее (ни одна строка соединения не создает файл mdd localdb).

База данных строилась, но она продолжала называть базу данных DefaultConnection, хотя строка подключения и т. Д. Не была названа этой. Я понял, что не передал строку подключения в свой DbContext ctor. Затем я изменил это, чтобы передать namer строки соединения в ctor моего файла DbContext. Поскольку я делаю это, я могу получить эту ошибку.

Целевой контекст «Mesanderson.Infrastructure.DatabaseConfig.MesandersonDb» не является конструктивным. Добавьте конструктор по умолчанию или выполните реализацию IDbContextFactory.

С Migrations, установленным в моем проекте данных, у меня есть эта структура

Настроить файл базы данных, InitializeDatabase вызванный из Global.asax

public class ConfigureDatabase
{
    public void InitializeDatabase()
    {
        Database.SetInitializer<Infrastructure.DatabaseConfig.MesandersonDb>(new Infrastructure.DatabaseConfig.DatabaseInitializer());
    }
}

Файл инициализации

internal class DatabaseInitializer : MigrateDatabaseToLatestVersion<Infrastructure.DatabaseConfig.MesandersonDb, Migrations.Configuration>
{

}

Файл конфигурации миграции (автоматическая миграция во время разработки)

internal sealed class Configuration : DbMigrationsConfiguration<Mesanderson.Infrastructure.DatabaseConfig.MesandersonDb>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
        MigrationsDirectory = @"DatabaseConfig/Migrations";
    }

    protected override void Seed(Mesanderson.Infrastructure.DatabaseConfig.MesandersonDb context)
    {

    }
}

Наконец, файл DbContext

internal class MesandersonDb : IdentityDbContext<Entities.Models.UserProfile>
{
    internal MesandersonDb() : base("MesandersonDb") { }

    DbSet<Entities.Models.Expense> Expenses { get; set; }
    DbSet<Entities.Models.BlogPost> BlogPosts { get; set; }
    DbSet<Entities.Models.Client> Clients { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Configurations.Add(new DatabaseConfig.ModelConfig.BlogCommentConfiguration());
        modelBuilder.Configurations.Add(new DatabaseConfig.ModelConfig.BlogPostConfiguration());
        modelBuilder.Configurations.Add(new DatabaseConfig.ModelConfig.ClientConfiguration());
        modelBuilder.Configurations.Add(new DatabaseConfig.ModelConfig.ExpenseConfiguration());
        modelBuilder.Configurations.Add(new DatabaseConfig.ModelConfig.UserProfileConfiguration());
    }
}

(incase important) Я также заменил код OOTB на контроллере учетной записи, чтобы использовать фабрику UserManager, поскольку я не хочу, чтобы имена строк соединений использовались по всему приложению.

public static class UserManagerFactory
{
    public static UserManager<UserProfile> GetUserManager()
    {
        return new UserManager<UserProfile>(new UserStore<UserProfile>(new Mesanderson.Infrastructure.DatabaseConfig.MesandersonDb()));
    }
}

В любом месте, о котором я рассказывал, ошибка связана с тем, что в DbContext нет никакого бездействия ctor, но у меня это есть.

Принятый ответ

Предложение, принятое OP как ответ:

Попробуйте сделать свой класс и конструктор public а не internal .




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему