将基于Entity Framework 5.0的项目从代码优先迁移到数据库优先时。我们将使用标准的VS2012向导从数据库中生成edmx模型,但除此之外,我们还有其他步骤吗?我想我必须删除所有定义了代码优先模型的类,甚至是迁移文件夹——除了这两个之外还有其他清理操作吗?
[编辑]:返回报告。
因此,实际体验介于我最初的预期和拉迪斯拉夫提到的之间(正如他所说,确切的条件取决于代码)。对我来说,整个行动花了大约15-20分钟,主要涉及
- 创建分支(安全,以防东西爆炸!)
- 删除代码优先类和源代码(我将它们移到VS2012之外以进行差异引用)
- 从数据库创建EDMX模型(将相同的命名空间等传递给向导以减少差异)
- 快速检查代码优先类和自动生成的数据库优先类。这基本上是1:1,因为我们一开始在代码优先模型中使用了合理的名称
- 逐一编译和修复每个错误
- 注意到许多错误是由于EF 5的自动复数与我自己对不同字段的复数。通过区分大小写的快速搜索修复了40多个错误->全部替换
- 编译后重新运行所有测试
- 合并功能分支返回
感谢
如果实体或上下文类包含任何额外的逻辑,这可能会非常复杂。您必须:
- 将EDMX模型添加到项目中,并让它生成实体类和上下文类
- 删除迁移
- 如果原始上下文类包含任何附加代码,则必须将其转换为分部类,该分部类与新生成的仅包含该附加代码的上下文类具有相同的名称、命名空间和程序集
- 如果任何实体类包含任何附加代码,则必须遵循与上下文相同的过程
- 如果额外的代码实际上是从现在自动生成的代码内部调用的,那么您必须进行一些其他更改,包括更改代码生成模板和使用分部方法
- 您必须从引导程序中删除任何数据库初始化或迁移执行
- 必须使用引用元数据文件的新连接字符串
另一个更复杂的选项是不使用自动生成功能并使用旧的上下文和实体类,但在这种情况下,您必须手动将它们与EDMX保持同步。