我一直都是面向数据库的程序员,所以直到今天,我一直使用数据库驱动的编程方法,我对T- SQL和SQL Server。试用EF代码优先和迁移 - 绊脚石
我想换我的头周围的实体框架6 代码优先方法 - 坦率地说 - 我挣扎。
我有一个现有的数据库 - 所以我做了Add New Item > ADO.NET Entity Data Model > Code-First from Database
,我得到了一堆代表我现有数据库的C#类。到现在为止还挺好。
我现在要做的是探索如何处理正在进行的数据库升级 - 无论是架构还是“静态”(预填充)查找数据。我的第一个抱怨是,从数据库反向工程的实体正在使用Fluent API进行配置,而创建我想创建为具有数据注释的C#类的新表似乎更自然。 “混合”这两种方法有什么问题吗?或者我可以告诉逆向工程步骤只使用数据注释属性而不是Fluent API?我试图创建漂亮的和小的迁移 - 每个要添加的每一组功能(例如,新表,新索引,一些新列等等) ) - 但看起来我不能有超过一个“待定”迁移......当我有一个,并且我进一步修改我的模型类,并且我尝试使用add-migration (name of migration)
进行第二次迁移,我是与:
无法生成显式迁移,因为以下显式迁移未决:[201510061539107_CreateTableMdsForecast]。在尝试生成新的显式迁移之前应用待处理的显式迁移。
认真?!?!?我不能有超过一个,单个等待移植?我需要在每次微小迁移后运行update-database
我正在添加?
好像是一个BIG缺点!我宁愿创建我的10,20个小巧,易于理解的迁移,然后然后将它们一举全部应用 - 无法做到这一点!?!?这真的很难相信.....任何方式呢?
关于你的第一个问题,你可能能够自定义使用的T4模板(https://www.nuget.org/packages/EntityFramework.CodeTemplates.CSharp/),但这是很多工作。我已经越来越意识到我可以如何将我的担忧与流利的API分开,我创建了一个映射文件夹并在那里完成所有配置。 –
对于迁移,我建议您使用小增量包。然后,当我准备进行生产部署时,我将使用-Source和-Target属性重新开发我的开发数据库,然后在生成我们的DBA需要的单个脚本之前全部重新应用它们。 –