将实体框架从数据库优先转换为代码优先

Bre*_*een 10 c# entity-framework asp.net-mvc-5

我正在尝试将现有数据模型从Database First转换为Code First.

背景

当前的解决方案(在我之前设置)使用Database项目来定义模型.然后将其发布到数据库,然后我们从所述数据库更新EDMX模型.

最后,运行几个T4模板以从EDMX模型生成POCO类,以及DBContext.

我想摆脱这一点,并纯粹转向Code First迁移方法.

我到目前为止做了什么

  • 我参加了由T4模板生成的POCO课程,并使他们成为该项目的一等公民.
  • 然后我从解决方案中删除了T4模板
  • 我使用了由T4模板生成的DBContext,并使其成为项目的一等公民.
  • 然后我从解决方案中删除了这个T4模板
  • 在Package Manager控制台中,我运行了"Enable-Migrations",并创建了我的Migrations文件夹

我还更改了连接字符串以使用System.Data.SqlClient提供程序.是:

<add name="MyContext" connectionString="metadata=res://Project.Data/Model.MyModel.csdl|res://Project.Data/Model.MyModel.ssdl|res://Project.Data/Model.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MY-SERVER;initial catalog=MY-DB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

变成:

<add name="MyContext" connectionString="data source=MY-SERVER;initial catalog=MY-DB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)

这是我遇到问题的地方

我现在正在尝试创建初始迁移,传递-IgnoreChanges标记以便我获得空迁移(考虑到数据库的年龄,我希望将来的迁移基于当前模式,而不是从头开始创建迁移).

当我跑: Add-Migration InitialCreate -IgnoreChanges

我收到此错误:

无法加载指定的元数据资源.

当我跑: Add-Migration InitialCreate -IgnoreChanges -ConnectionString "data source=MY-SERVER;initial catalog=MY-DB;Integrated Security=SSPI;" -ConnectionStringProviderName "System.Data.SqlClient"

我收到此错误:

无法使用标准DbConnection覆盖此上下文的连接,因为原始连接是EntityConnection.

在这里不知所措.看来即使我删除了对EDMX模型的引用,上下文仍然知道它.我想彻底摆脱它,并采用纯粹的Code First.

任何帮助赞赏.

Kir*_*eed 1

只需注释掉InitialCreate.cs的内容然后在PM中运行

update-database
Run Code Online (Sandbox Code Playgroud)

此后新的迁移将正常工作。