c# - EF 6.0 代码优先 : How to Synchronize an existing database with existing domain classes

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

对于一个显而易见的问题,我提前表示歉意,但我是 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

中的现有域类

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

最佳答案

持久性和域在代码优先中是同一回事 - 它是定义数据库的一组类,也用于通过上下文与其交互。参见 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 脚本以使其与您的开发数据库同步。

关于c# - EF 6.0 代码优先 : How to Synchronize an existing database with existing domain classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32538763/

相关文章:

c# - 替代 Microsoft Data Access ApplicationBlocks 过时的 SqlHelper 类

c# - 如何打破 IAsyncResult?

c# - 使用 SWIG 从 C# 使用 C++ 游戏引擎

asp.net-mvc - GlobalConfiguration 不包含配置的定义

c# - WPF 组合框问题

c# - 从基类的静态方法获取派生类类型

c# - RethinkDB 中的原子条件更新

c# - 如何使用 C# 中的 MagickNet 将图像拼接在一起?

c# - 将 SQL 查询转换为 LINQ 查询

c# - EF6如何映射这种零或一对一关系