我提前为可能是一个明显的问题道歉,但我是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,但我找不到这个确切的用例 谢谢你的帮助。
答案 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脚本,以使其与您的开发数据库保持同步。