【问题标题】:Error setting Database Initializer: Type argument 'Configuration' does not inherit from or implement the constraint type 'DbContext'设置数据库初始化程序时出错:类型参数“配置”不继承或实现约束类型“DbContext”
【发布时间】:2016-11-15 02:51:01
【问题描述】:

我正在将 Code-First 应用到 MS SQL Server 2012 中的现有数据库。我已经完成:右键单击项目 -> 添加项目 -> ADO.net 实体数据模型 -> 数据库中的 Code-First。这样,数据库中的所有表都会导入到我的 Web API 项目中。

然后,在this 博客帖子之后,我跳过了第 1 步和第 2 步,并成功进行了第 3 步。然后在第 4 步,因为我正在做一个新项目,而不是从 Database-First 迁移项目;有人建议我将这个 sn-p 放在我的 DbContext 类的构造函数中,而不是创建一个新类来设置数据库初始化器:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<Migrations.Configuration, WorkflowDbContext>());

这是在我将给定的代码实现到我的 DbContext 类之后:

Partial Public Class DbContext1
    Inherits DbContext

Public Sub New()
    MyBase.New("name=DbContext1")
    Database.SetInitializer(New MigrateDatabaseToLatestVersion(Of Migrations.Configuration, DbContext1))
End Sub

但是当我这样做时,上面代码中的关键字错误,我总结如下:

  • SetInitializer:“类型参数 'Configuration' 不继承或实现约束类型 'DbContext'。”
  • Migrations.Configuration:“类型参数 'Configuration' 不继承或实现约束类型 'DbContext'。”
  • DbContext1:“类型参数 'DbContext1' 不继承或实现约束类型 'DbMigrationsConfiguration(Of Configuration)'。”

现在,我正在修改(添加外键和导航属性)使用 EF 代码优先从数据库自动导入的模型类。这是我现在面临的问题的原因吗?

有人可以向我指出我应该如何解决这些问题吗?

P/S:

  1. 我的项目中只有一个 DbContext 和一个 Configuration。
  2. 由于上面的代码还没有工作,我特意跳过了步骤 4 来尝试。我也跳过了第 5 步,因为我的 ConnectionString 已经是 DbContext 类型。所以我继续执行第 6 步。令人惊讶的是,它奏效了!我做了初始添加迁移,现在已经创建了一个“初始”类。但是我很担心如果跳过这些步骤会在以后产生影响。可以?

【问题讨论】:

    标签: vb.net asp.net-web-api visual-studio-2015 sql-server-2012 ef-code-first


    【解决方案1】:

    将 MigrateDatabaseToLatestVersion(Of Migrations.Configuration, DbContext1)) 更改为 MigrateDatabaseToLatestVersion(Of DbContext1,Migrations.Configuration)) 我认为您颠倒了类型参数的顺序

    【讨论】:

    • 我通过重新输入 Add-Migration initial 来重新搭建迁移“初始”,然后它说“只有用于迁移 'initial' 的设计器代码被重新搭建。要重新搭建整个迁移,使用 -Force 参数。”对于我的情况,我是否需要重新搭建整个迁移?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2012-06-29
    相关资源
    最近更新 更多