设置数据库初始化程序时出错:类型参数“配置”不继承或实现约束类型“DbContext”

时间:2016-11-15 02:51:01

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

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

然后,在this博文后,我跳过了第1步和第2步。 2并成功进入第3步。然后在第4步,因为我正在做一个新项目,而不是从Database-First迁移项目;而不是创建一个新的类设置数据库初始化程序,有人建议我把这个片段放在我的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:“类型参数'配置'不会继承或实现约束类型'DbContext'。”
  •   
  • Migrations.Configuration:“类型参数'配置'不会继承或实现约束类型'DbContext'。”
  •   
  • DbContext1:“类型参数'DbContext1'不继承或实现约束类型'DbMigrationsConfiguration(Of Configuration)'。”
  •   

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

有人能指出我应该做些什么来修补问题吗?

P / S:

  1. 我的项目中只有一个DbContext和一个Configuration。
  2. 由于上面的代码还没有成功,我故意为了尝试而跳过第4步。我也跳过了第5步,因为我的ConnectionString已经是DbContext类型。所以我继续前进到第6步。令人惊讶的是,它奏效了!我做了Add-Migration初始化,现在已经创建了一个“初始”类。但是我很担心如果跳过这些步骤会在以后产生影响。可以?

1 个答案:

答案 0 :(得分:0)

将MigrateDatabaseToLatestVersion(Of Migrations.Configuration,DbContext1)更改为MigrateDatabaseToLatestVersion(Of DbContext1,Migrations.Configuration)) 我认为你颠倒了类型论证的顺序