gpt4 book ai didi

entity-framework - Code First 现有数据库 vs EF Designer 到现有数据库

转载 作者:行者123 更新时间:2023-12-03 11:41:20 25 4
gpt4 key购买 nike

我们正在启动一个新的大型企业项目。数据库将包含 100 多个表,我们将使用 Entity Framework 、Web API 和 MVC。

我的问题与解决方案的 Entity Framework 方面特别相关。
我正在尝试在以下选项之间做出选择:

  • 首先对现有数据库进行编码
  • EF Designer 到现有数据库(数据库优先)

  • 我知道我们可以使用 EF 首先从代码或从 EF 设计器生成数据库,但我们更喜欢完全控制数据库并以传统方式开发它,因此我们排除了允许我们自动执行的 EF 选项生成数据库。

    我在 Internet 上可以找到的与 Code First 相关的大部分内容都涉及创建新数据库,然后使用代码迁移。当讨论首先涉及数据库时,讨论将有利于 EF 设计器。此处示例: Code-first vs Model/Database-first

    我更喜欢将 Code First 与现有数据库结合使用。

    以下是我支持此选项的考虑因素,我想知道是否还有其他需要考虑的事项,以及我的假设/想法是否正确。

    首先编码到现有数据库
  • 开始时将构建大量类,但我们可以从 EF 模型向导进行初始生成。
  • 然后可以使用任何自定义属性修改类或删除我们不需要的任何内容,而不是需要我们扩展任何类的 EF 设计器。
  • 缺点是对数据库的任何更改都必须手动添加到我们的类中,不像使用设计器那样可以轻松更新。

  • 编辑:
    我想我在这方面感到困惑。从阅读来看,数据优先的正确方法似乎是为所有自动生成的类创建分部类,然后对分部类进行任何修改作为“业务”层的一部分。
    因此,我的想法已经从偏爱从数据库中的代码优先,到使用 EF 设计器到现有数据库,然后创建分部类。

    最佳答案

    在任何情况下,您都必须同步 EDM(实体数据模型)和 DB。您必须确保 EDM 与您的数据库完全兼容。如果不是,它将失败,无论是 Code First 还是您使用模型。

    唯一的区别在于:

  • 使用设计器,您可以以图形方式进行操作,并轻松设置属性、列名等
  • 使用 Code First,您必须使用约定、Fluent API 或属性来设置这些属性、列名、数据类型等

  • 使用 Code First 的唯一优势是,一旦您同步了 Code First 模型(请参阅“Code First 也是一个 EDM,但有些受限”)和数据库,您就可以开始使用迁移,并使用它们发展您的模型,这稍后可以更轻松地将更改应用于生产数据库(每当发布新版本时)。对于图形模型,您不能使用迁移,而必须直接从 Visual Studio 升级 Db,或手动创建 SQL DDL 脚本。

    Code First 也是一个 EDM,但缺少一些功能

    无论是使用 Code First 还是绘制模型,都会生成一个 EDM(实体数据模型)。如果您习惯于设计数据库,那么使用设计器可能会更自在。请注意下面有关 EF Core(前 EF7)的说明!。

    但是,Code First 生成的 EDM 有一些设计人员没有的限制。

    Code First 最突出的限制是在设计器中您可以轻松地从 BD 映射用户定义的函数,例如标量和表值函数以及存储过程。使用 Code First 有更多限制。

    在 EF 6.1 中,这些限制大部分都消失了,但进行映射仍然有点困难。(实际上,截至今天,2014 年, there's only a samplea simple Nuget package 关于如何做到这一点。)。

    自 2017 年 3 月起,不再更新非核心 EF,即 EF 6.1。如果出现错误,MS 可能会解决它们,(这是错误的:但不要指望进一步的更改)

    6.2 中出现的新特性: What's new in EF 6.2 ,包括使用 Fluent API 定义索引,支持 Like , 支持非身份 DB 生成的 key ,如 SEQUENCE以及其他一些变化

    EF Core、前 EF7 的变化(截至 2015 年 5 月)

    目前,Microsoft 正在开发 EF 7,但它也在维护 EF 6.x。当前的建议是继续使用 EF 6 一段时间,因为 EF 7 还不够成熟。

    EF 7 正在从头开发,以克服继承的 ObjectContext,它对实现新功能构成了可怕的限制。但它实现了最广泛使用的 DbContext,几乎没有什么变化。因此,如果您使用 DbContext,您将有一个简单的迁移路径来传入新版本的 EF。

    但是有一个非常重要的变化: 在 EF Core(前 EF7)中,EDM 模型消失,取而代之的是 Code First 模型 .因此,如果您想使用当今的技术并确保轻松升级到新版本,请不要使用模型优先或数据库优先:使用代码优先。 Microsoft 做出此决定有重要原因:Code First 在具有版本控制的团队环境中工作得更好,并且允许使用迁移。无论如何,您仍然可以以图形方式(使用 Power Tools)查看模型或使用第三方工具使用设计器创建模型(当前的一些商业解决方案将支持 EF7)。

    注意:为什么 Code First 在团队环境中要好得多?如果多个团队成员修改模型,那么合并多个代码文件中的更改比在包含大量定义模型的行的大型 XML 文件中更容易。理解这个 Hugh XML 文件中版本之间的变化也困难得多。对于中型或大型项目,我建议您尽快转向 Code First

    关于entity-framework - Code First 现有数据库 vs EF Designer 到现有数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229068/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com