gpt4 book ai didi

c# - DbContext 不可构造

转载 作者:行者123 更新时间:2023-12-05 04:17:38 24 4
gpt4 key购买 nike

我刚刚开始使用 MVC5,已经对 MVC4 有了相当多的了解。

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

数据库正在构建,但它一直将数据库命名为 DefaultConnection,即使连接字符串等尚未命名。我意识到我没有将连接字符串传递到我的 DbContext 构造函数中。然后我将其更改为在我的 DbContext 文件的构造函数中传递连接字符串命名器。因为这样做我可以得到这个错误。

The target context 'Mesanderson.Infrastructure.DatabaseConfig.MesandersonDb' is not constructible. Add a default constructor or provide an implementation of 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());
}
}

(以防万一)我还替换了帐户 Controller 上的 OOTB 代码以使用 UserManager 工厂,因为我不希望在整个应用程序中使用连接字符串名称。

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

我看过的任何地方都说错误是因为 DbContext 中没有无参数构造函数,但我有。

最佳答案

OP 接受的建议作为答案:

尽量让你的类和构造函数都public而不是internal

关于c# - DbContext 不可构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com