gpt4 book ai didi

entity-framework - Code First Entity Framework 和 SQL Server Data Tools 数据库项目的开发过程

转载 作者:行者123 更新时间:2023-12-04 20:37:50 27 4
gpt4 key购买 nike

我一直非常成功地结合使用数据库优先 Entity Framework (EDMX) 和 SQL Server Data Tools 数据库项目 - 更改数据库中的架构和“从数据库更新模型”以将它们放入 EDMX。我看到 Entity Framework 7 将放弃 EDMX 格式,并且我正在寻找一个新的过程,该过程将允许我将 Code First 与数据库项目结合使用。

我现有的许多开发和部署过程都依赖于包含架构的数据库项目。这在源代码控制中与代码一起部署,并用于更新生产数据库,并使用部署前和部署后脚本完成数据迁移。我不愿意放弃它。

作为这项工作的一部分,我很想将一个大型 EDMX 拆分为许多较小的模型。这意味着多个 Code First 模型引用同一个数据库。

假设我有一个现有的数据库和一个与之配套的数据库项目 - 我想我会首先使用以下向导来创建一组初始实体和上下文类 - 我将为每个模型执行此操作。

Add | New Item... | Visual C# Items | Data | ADO.NET Entity Data Model | Code first from database

我的问题是 - 我从那里去哪里?如何处理架构更改?只要我可以更新数据库架构,我就可以使用架构比较操作将更改引入到项目中。

这些是我正在考虑的选项。
  • 在数据库中进行更改并使用上面的向导重新生成。我想我需要对部分类中的实体和/或上下文类进行任何修改,以免它们被覆盖。使用要包含的表等列表来自动执行此操作会很方便。可能是 Powershell 或 T4 模板? SqlSharpener (由 Keith 在评论中建议)看起来可能会有所帮助。我也会看 disabling all but the checks for database existence and schema compatibility在这里,正如史蒂夫格林在评论中所建议的那样。
  • 更改代码并使用迁移将这些更改应用于数据库。据我所知,如果模型没有干净地映射到数据库模式(我的没有)可能会带来问题。我还在网络上看到一些提示,称迁移并未涵盖所有数据库对象类型——这也是我不久前使用 Code First 的经验——我认为没有涵盖的独特约束。这在 Entity Framework 7 中有所改进吗?
  • 在数据库中进行更改,然后使用迁移作为代码和数据库之间的一种比较。查看差异并调整代码以适应。继续下去,直到没有差异。
  • 在代码和数据库中手动进行更改。显然,这不是很吸引人。

  • 其中哪一个最好?在尝试实现之前,有什么我需要知道的吗?还有其他更好的选择吗?

    最佳答案

    因此,我们最终采用的路径是创建一些 T4 模板,以生成 DbContext 和我们的实体。我们为实体 T4 提供了一个表列表,从中生成实体,并有一个语法来指示基于一个表的实体应该从基于另一个表的实体继承。自定义代码放在部分类中。所以我们的解决方案看起来最像我上面的选项 1。

    此外,我们开始在 DbContext 的 OnModelCreating 中生成流畅的配置,但已切换到使用实体上的属性(属性存在的地方 - HasPrecision 是我们必须使用流畅配置的一种)。我们发现,当它就在装饰该属性时,它会更简洁、更容易找到该属性的配置。

    关于entity-framework - Code First Entity Framework 和 SQL Server Data Tools 数据库项目的开发过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251018/

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