DbContext不可构造

时间:2014-02-02 21:25:59

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

我刚刚开始玩MVC5,已经有相当多的MVC4曝光率。

首先,我决定在我的应用程序ApplicationUser中调用UserProfile(因此UserProfile继承自IdentityUser)。我还希望有一个DbContext,以便轻松使用UserProfile和其他实体之间的关系。无论是否有连接字符串(没有连接字符串创建localdb mdf文件)都会发生此错误。

数据库正在构建,但它仍然命名数据库DefaultConnection,即使连接字符串等没有被命名为this。我意识到我没有将连接字符串传递给我的DbContext ctor。然后我将其更改为在我的DbContext文件的ctor中传递连接字符串namer。由于这样做,我可以得到这个错误。

  

目标上下文'Mesanderson.Infrastructure.DatabaseConfig.MesandersonDb'不可构造。添加默认构造函数或提供IDbContextFactory的实现。

在我的数据项目上安装了迁移,我有这个结构

配置从Global.asax调用的InitializeDatabase数据库文件

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());
    }
}

(相关)我还替换了帐户控制器上的OOTB代码以使用UserManager工厂,因为我不想在整个应用程序中使用连接字符串名称。

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

我看过的任何地方都说这个错误是因为DbContext中没有paramless ctor,但我有。

1 个答案:

答案 0 :(得分:2)

OP接受的建议作为答案:

尝试同时创建您的类和构造函数public,而不是internal