【问题标题】:Managing normalising a database over time using Entity Framework Core使用 Entity Framework Core 随着时间的推移管理数据库的规范化
【发布时间】:2018-09-11 15:18:32
【问题描述】:

我们刚刚开始摆脱旧代码库,并开始在我们的大多数新软件中使用 .net 和 Entity Framework Core。

我们已将数据库从旧平台迁移到 SQL Server,但数据陈旧且规范化程度不佳。由于对遗留语言中(大型)现有代码库的潜在影响,我们无法一次全部进行规范化项目,因此我们正在将主键和外键定义添加到我们的数据库中,并重新生成我们的 Entity Framework Core 模型随着更多表对框架有效,从头开始。

我觉得这样做会丢失 Entity Framework Core 的一些重要功能,但我对框架的了解还不够,无法确定它是什么。我知道生成的模型缺乏完整性(提示我的问题是因为带有标识列的表没有标记为ValueGeneratedOnAdd(); 的列实际上该表根本没有出现在OnModelCreating 方法中)但我没有知道这是数据库的问题还是我犯的另一个错误。

我的问题是:Entity Framework Core 中有哪些功能可以管理快速发展的数据库模型?我应该为自己做什么,我应该依靠Scaffold-DBContext 命令做什么?

【问题讨论】:

    标签: c# .net entity-framework-core


    【解决方案1】:

    使用 EF Core,您需要的大部分事情将由 Scaffold-DBContext 完成。它现在唯一不能处理的是 DBQuery 集。您将不得不手动编写这些代码。除此之外,其他一切都由命令非常雄辩地处理。

    就 ValueGeneratedOnAdd() 而言,我唯一一次看到这是一个问题是版本化表。如果您有一个版本化的表,Scaffold-DBContext 不会将其添加到这些字段中,您必须拥有这些字段,因此您必须手动将它们添加到您的代码中。

    【讨论】:

    • 不,它们不是版本化表。我们在数据库中只有两个,它们还没有在模型中。经过检查,我们在模型中大约一半的 Identity 列上缺少 ValueGeneratedOnAdd(),我就是不明白为什么。
    • 没有必要。 EF Core 了解标识列,并且不需要在添加时生成值的注释。您需要它进行版本控制的唯一原因是 EF Core 还没有完全实现它。
    • 哦,我明白了。设置了 ValueGeneratedOnAdd() 的表实际上是出现在模型中的表,但不是我一直在直接查看的表。它们的主键不是 Identity 列(它们实际上应该是外键),这就是 Identity 列被定义为 ValueGeneratedOnAdd() 的原因。现在很简单,您已经向我保证它应该可靠地工作。谢谢。
    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    相关资源
    最近更新 更多