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

EF 6.0 Code First: How to Synchronize an existing database with existing domain classes

对于一个显而易见的问题,我提前表示歉意,但我是 Entity Framework 的新手。

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

它使用 现有域 类 来自:MyStuff.Domain

我有能力修改 MyStuff.Domain,它将通过 MyStuff.Service

公开

我想将我的 EF 6.0 代码优先项目与现有数据库

同步

所以,我决定按照本教程进行操作: Code First From Database MSDN guide

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

中的现有域

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

Persistence 和 Domain 在 code first 中是同一回事 - 它是 类 的集合,它定义了您的数据库并且还用于通过上下文与其交互。参见 http://weblogs.asp.net/scottgu/using-ef-code-first-with-an-existing-database#7579835

如果您的数据库已经存在,对其进行逆向工程并将 POCO 类 移动到您想要的位置 (MyStuff.Domain),并将生成的模型代码移动到您的上下文中。这包括一个 OnModelCreating() 重写,它具有流畅的 api 代码,定义了 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 脚本以使其与您的开发数据库同步。