c# - 将 Entity Framework 从数据库优先转换为代码优先

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

我正在尝试将现有数据模型从数据库优先转换为代码优先。

背景

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

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

我想摆脱这种情况,完全转向代码优先迁移方法。

到目前为止我做了什么

  • 我采用了 T4 模板生成的 POCO 类,并使它们成为项目的一等公民。
  • 然后我从解决方案中删除了 T4 模板
  • 我采用了由 T4 模板生成的 DBContext,并使其成为项目的一等公民。
  • 然后我从解决方案中删除了这个 T4 模板
  • 我从包管理器控制台运行“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" />

更改为:

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

这是我遇到问题的地方

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

当我运行时:Add-Migration InitialCreate -IgnoreChanges

我收到这个错误:

Unable to load the specified metadata resource.

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

我收到这个错误:

Can not override the connection for this context with a standard DbConnection because the original connection was an EntityConnection.

这里很迷茫。看起来即使我删除了对 EDMX 模型的引用,上下文仍然知道它。我想完全摆脱它并采用纯代码优先。

感谢任何帮助。

最佳答案

将InitialCreate.cs的内容注释掉即可 然后在下午运行

update-database

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

关于c# - 将 Entity Framework 从数据库优先转换为代码优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25254533/

相关文章:

c# - FileStream 和 System.IO.File 方法之间的文件访问差异

c# - 等待事件处理程序

c# - 无法转换 double ?加倍

asp.net - 带有 PostgreSql 的 ASP Core 1。授权和认证

c# - EF 5 : How to cancel a longrunning query in a async Task

javascript - 如何通过 AJAX 调用创建部分 View

c# - 在使用 EF6 和 MVC 5 进行代码优先迁移期间,导航属性不是类型的声明属性

c# - 通知图标附近出现小气球/框

asp.net-mvc - asp.net mvc/webapi 5 的( headless )集成测试框架

c# - 无法在 C# 中初始化列表集合?