【发布时间】:2014-10-04 22:42:06
【问题描述】:
我正在尝试将现有数据模型从 Database First 转换为 Code First。
背景
当前的解决方案(摆在我面前)使用数据库项目来定义模型。然后将其发布到数据库,然后我们从所述数据库更新 EDMX 模型。
最后,运行几个 T4 模板以从 EDMX 模型以及 DBContext 生成 POCO 类。
我想摆脱这种情况,并完全采用 Code First 迁移方法。
到目前为止我做了什么
- 我采用了由 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="data source=MY-SERVER;initial catalog=MY-DB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" 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? msdn.microsoft.com/en-us/data/jj200620.aspx
-
这是我认为我们必须走的方向。鉴于某些...有趣的表继承使用,我试图避免这种情况(仅将基线模型保留在 db 中,并将迁移作为仅在此之后的更改)。不过我会调查一下。
-
我现在正在使用它,效果很好。如果数据库不遵循实体框架所期望的约定,您可能会遇到一些麻烦,但有一些方法可以绕过它。我发现我必须手动创建几个 EF 需要处理包含的表。
标签: c# entity-framework asp.net-mvc-5