实体框架5,从代码优先转换为数据库优先?

5

我已经使用Code First创建了一个数据库,它运行得很好。但是,在Visual Studio之外对数据库进行了许多更改,以至于任何尝试迁移都会产生错误。因此,我的问题是,是否有一种方法可以从Code First切换到Database First解决方案?

1个回答

4
这很容易,只需创建一个新的数据库优先模型并删除您的代码优先模型即可。如果您处于相同的命名空间并以相同的方式命名上下文,则大多数代码都将编译成功。
然而,转向数据库优先会使您失去迁移的能力,这是代码优先方法的一个明显优势。如果我是您,我会花更多时间尝试创建迁移,甚至在生成器失败时手动编写迁移,但仍然坚持使用代码优先方法。

我该怎么做呢? 我需要添加一个 ADO.NET 实体数据模型吗?如果是这样,那我已经创建的模型会发生什么变化? - Heath
做什么?首先创建一个数据库模型吗?从现有数据库中添加/新建项/数据/实体框架模型。在VS中只需要几个点击即可完成。不过你可能在问其他的东西... - Wiktor Zychla
6
你真的认为Code First适合一个中等规模的项目吗?我对迁移不太感冒,尤其是填充方法和使用新版本添加数据。一旦你发现自己在方法中编写SQL,我认为这场比赛就结束了。我觉得这种方式有些危险,在部署到生产环境时,使用SQL脚本会更安全。 - Santhos
@Santhos:我理解的正好相反。我认为ef是一个轻量级的包装器,用于手工编写sql的自定义活动,当自动化无法胜任时。这就像你车里的自动变速器,它能完成95%的工作,但当你知道你可以做得更好时,你只需将其关闭。 - Wiktor Zychla
1
听起来不错,但也有点不一致。我的问题主要在于数据部分。你如何处理添加数据?比如说你要添加一个新表格,它是一个枚举表格,你需要添加200个标签。你会把它放在种子方法中吗?如果数据在下一次部署之前发生了变化怎么办?那你会从种子方法中删除它吗?还是使用上升和下降来完成工作? - Santhos
1
@Santhos:我从不在种子中添加实际数据,而是在迁移(Up)中使用手动 SQL。这是唯一的方法,因为元数据可能会在未来发生变化。没有任何问题,无论使用哪种方法,我都会在迁移数据库时编写手工 SQL,而不是使用 EF。 - Wiktor Zychla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接