加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 获取上下文是不可构建的.添加一个默认的构造函

发布时间:2020-12-15 20:27:55 所属栏目:asp.Net 来源:网络整理
导读:当我尝试使用代码优先迁移时,我收到此错误. 我的上下文有一个连接名称的构造函数. public class VeraContext : DbContext,IDbContext{ public VeraContext(string NameOrConnectionStringName = "VeraDB") : base(NameOrConnectionStringName) { } public ID
当我尝试使用代码优先迁移时,我收到此错误.

我的上下文有一个连接名称的构造函数.

public class VeraContext : DbContext,IDbContext
{
    public VeraContext(string NameOrConnectionStringName = "VeraDB")
        : base(NameOrConnectionStringName)
    {
    }

    public IDbSet<User> Users { get; set; }
    public IDbSet<Product> Products { get; set; }
    public IDbSet<IntCat> IntCats { get; set; }
}

当项目运行时,这个连接名称注入了ninject,我也将其指定为上述代码中的默认值,但这没有帮助.

kernel.Bind<IDbContext>()
    .To<VeraContext>()
    .WithConstructorArgument("NameOrConnectionStringName","VeraDB");

当我尝试使用“启用迁移”添加迁移时会抛出错误:

The target context ‘VeraData.EF.Infrastructure.VeraContext’ is not
constructible. Add a default constructor or provide an implementation
of IDbContextFactory.

如果我从VeraContext中删除构造函数,它将会工作,而使用VeraData.EF.Infrastructure.VeraContext作为名称创建另一个数据库.

我假设ninject只在项目运行时传递连接字符串,而不是当我使用代码第一次迁移时.无论如何,我可以在使用代码首次迁移时注入/提供连接名称的默认值?

解决方法

基本上你需要一个默认的ctor(这是错误) – 但只是实现它会导致问题.

您必须实施IDbContextFactory才能使结果保持一致(或者您的代码迁移将无法正常工作).

Migrations actually call your default constructor to make a
connection. So you’re other ctor won’t matter much.

这是基本的工厂…

public class MyContextFactory : IDbContextFactory<MyContext>
{
    public MyContext Create()
    {
        return new MyDBContext("YourConnectionName");
    }
}

你应该结合注射,注入和构造你的DbContext,如你所愿.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读