我正在尝试将现有数据模型从数据库优先转换为代码优先。
背景
当前的解决方案(在我之前实现)使用数据库项目来定义模型。然后将其发布到数据库,然后我们从所述数据库更新 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="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
标志,以便我得到一个空迁移(考虑到数据库的年龄,我希望 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/