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

时间:2014-08-12 00:39:38

标签: c# entity-framework asp.net-mvc-5

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

背景

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

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

我想摆脱这种情况,并纯粹转向Code First迁移方法。

我做得很远

  • 我参加了由T4模板生成的POCO课程,并使他们成为该项目的一等公民。
  • 然后我从解决方案中删除了T4模板
  • 我使用了由T4模板生成的DBContext,并使其成为项目的一等公民。
  • 然后,我从解决方案中删除了此T4模板
  • 在软件包管理器控制台中,我运行了#34;启用 - 迁移",并创建了我的迁移文件夹

我还更改了连接字符串以使用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" />

更改为:

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

这是我遇到问题的地方

我现在正在尝试创建初始迁移,传递-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。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

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

update-database

之后,新迁移将正常工作。