当前位置: 首页 > 知识库问答 >
问题:

DbContext不可构造

蒙经纶
2023-03-14

我刚刚开始玩MVC5,已经接触了相当多的MVC4。

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

数据库正在生成,但它一直命名数据库DefaultConnection,即使连接字符串etc未命名为this。我意识到我没有将连接字符串传递到我的DbContext中。然后,我将其更改为在DbContext文件的ctor中传递连接字符串名称。由于这样做,我可以得到这个错误。

目标上下文为“Mesanderson”。基础设施数据库配置。MesandersonDb'不可构造。添加默认构造函数或提供IDbContextFactory的实现。

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

配置数据库文件,从全局调用初始化数据库。尽快

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相关)我还替换了帐户控制器上的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,但我有。

共有1个答案

越琦
2023-03-14

OP接受的建议作为答案:

尝试将类和构造函数都设置为公共的,而不是内部的

 类似资料:
  • 所以С能否请您向我解释一下,正确的方法是否是为不同类型的用户提供不同的DBContext。 例如:我们有两种方法的ApicController: 之后,每个命令都依赖于具有不同配置的不同服务/DbContext。例如: 我觉得我错过了什么或者有更好的解决办法

  • 问题内容: 我正在使用EF 6.1.0 我在下面将自定义DBContex对象作为DBEntites 我对上下文对象执行以下操作 但是在放置上下文对象之后,我仍然可以看到一个活动的数据库连接。在连接状态下,我可以看到该连接已经关闭(该连接从未为真)。 我正在使用以下查询来查看SQL上的连接。 在下面的语句中,增加了sql连接计数。但是即使处置了它也从未失败过。(我的意思是在使用块计算后,它应该关闭连

  • 本文展示的是使用 DbContextOptions 配置 DbContext 的模式。选项集(Options)主要是用来选择和配置数据存储的。 配置 DbContextOptions DbContext 必须具有一个 DbContextOptions 的实例才能执行。这可以通过重写 OnConfiguring 来配置,或者通过构造方法参数由外部提供。 如果同时使用了两种方式,OnConfiguri

  • 我试图用模拟的dbcontext为我的服务创建一个单元测试。我创建了一个接口,具有以下函数:

  • 默认的MVC 5应用程序在identitymodels.cs中附带了这段代码-这段代码用于默认模板的所有ASP.NET标识操作: 如果我使用带有实体框架的视图搭建一个新的控制器,并创建一个“新的数据上下文”...在对话框中,我得到为我生成的: 我应该将这两个(和)中的哪一个用于我自己的所有其他模型?或者我应该只使用默认的自动生成的,因为它是从基类派生的,所以使用它应该不成问题,或者会有一些开销?您

  • 我想向DbContext的构造函数传递一个连接字符串。这里已经回答了这样做的方法:将连接字符串传递给CodeFirstDBContext (代码,如果你不喜欢点击) 但是,当我尝试启用迁移时,收到错误:“目标上下文“…”不可构造。请添加默认构造函数或提供IDbContextFactory的实现。” 另外,当我尝试使用EF PowerTools生成实体数据模型时,收到错误:“在所选文件中找不到从Db