EF 6.0 Code First:如何将现有数据库与现有域类同步

时间:2015-09-12 12:25:54

标签: c# .net entity-framework ef-code-first

我提前为可能是一个明显的问题道歉,但我是Entity Framework的新手。

我有一个特定程序集中的EF Code First项目:MyStuff.Persistence

它使用来自MyStuff.Domain

现有域类

我可以修改MyStuff.DomainMyStuff.Service

我想将我的EF 6.0代码第一个项目与现有数据库

同步

所以,我决定遵循这个教程: Code First From Database MSDN guide

问题在于它在MyStuff.Persistence中创建了域类,取代了MyStuff.Domain

中的现有类

如何同步现有元素(数据库/域)?  我通过谷歌搜索了解了Fluent API,但我找不到这个确切的用例 谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

持久性和域首先在代码中是相同的 - 它是定义数据库的类集,也用于通过上下文与之交互。见http://weblogs.asp.net/scottgu/using-ef-code-first-with-an-existing-database#7579835

如果您的数据库已经存在,请对其进行反向工程并将POCO类移动到您想要的位置(MyStuff.Domain),并将生成的模型代码移动到您的上下文中。这包括使用流畅的api代码的OnModelCreating()覆盖,该代码定义了EF无法按惯例计算的任何关系(https://msdn.microsoft.com/en-us/data/jj679962.aspx)。

为了保持同步,EF将从您的类构建一个模型并将其与数据库进行比较。如果它们不同,则取决于您的初始化程序(http://blog.oneunicorn.com/2013/05/28/database-initializer-and-migrations-seed-methods)。您可以选择在早期开发中使用DropCreateDatabaseIfModelChanges。在这种情况下,EF将删除您的数据库(包括现有数据)并根据您的模型和流畅的代码重新创建它。您可以使用初始化程序的Seed()方法重新填充您可能需要的任何测试数据。

一旦启动并运行一段时间,您可能不希望使用此技术,而是转而使用MigrateDatabaseToLatestVersion初始化程序进行数据库迁移。通过这种方式,您可以正常开发并启用AutomaticMigrations(https://msdn.microsoft.com/en-us/data/jj554735.aspx)。当您需要更新其他数据库时,您将生成一个SQL脚本,以使其与您的开发数据库保持同步。