【问题标题】:Entity Framework Code First with an existing database实体框架代码优先与现有数据库
【发布时间】:2013-10-24 01:23:01
【问题描述】:

我必须创建一个新项目,并且(像往常一样)使用现有的 SQL Server 数据库。

我以前使用 EF Code First 连接我的数据库,打开我的 EDMX 模型设计器,然后右键单击 --> 添加代码生成项。 (http://weblogs.asp.net/jgalloway/archive/2011/02/24/generating-ef-code-first-model-classes-from-an-existing-database.aspx) 简单。

但现在我发现有一种叫做 EF Power Tools 的东西可以让我先执行逆向工程师代码(很酷的名字!)并得到相同的结果 (http://msdn.microsoft.com/en-us/data/jj200620)

你知道这两个选项的区别吗?哪个更好?

提前致谢。

(对不起,如果之前有人问过这个问题,但我没有找到它。)

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    不同之处在于 edmx 方法不是代码优先,而是使用DbContext API 的数据库优先。您将始终使用数据库作为模型更改的来源。

    EF Power Tools 使用 DbContext 生成真正的代码优先模型:从那时起,您将首先更改类模型并相应地修改数据库(例如通过 EF 迁移)。

    两者都不是“更好”。 DbContext API 比 ObjectContext 更容易使用,但两种方法都使用前者。您可以选择是先使用数据库还是先使用代码。这是个人喜好问题,可能取决于谁维护数据库结构。使用数据库优先,可以更轻松地响应其他人对数据库结构施加的更改。

    【讨论】:

    • 非常感谢格特。新应用程序可能会创建一个新数据库而不是使用旧数据库。您认为在这种可能的新场景中使用 EF Code First 创建类并让 EF 创建我的数据库会更好吗?
    • 就个人而言,我更喜欢代码。但这真的是品味问题!
    【解决方案2】:

    就工作流程而言,首先是数据库,加上@Gert-Arnold 所说的:

    使用数据库优先,可以更轻松地响应其他人对数据库结构施加的更改。

    如果其他人正在管理数据库更改,我发现使用 EF 设计器要容易得多。您将获得一个更新的数据库,然后只需在 EF 设计器中单击鼠标右键并从数据库中更新模型。您可以使用源代码管理轻松查看已更改的内容。

    此外,如果您只需要数据库中的表子集,逆向工程会导致大量工作必须返回并从上下文中删除类和属性。

    我发现通过代码优先对现有数据库进行重新逆向工程,试图弄清楚发生了什么变化以及我需要如何更新使用上下文的代码实在是太痛苦了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多