C# 使用实体框架核心管理数据库随时间的规范化

C# 使用实体框架核心管理数据库随时间的规范化,c#,.net,entity-framework-core,C#,.net,Entity Framework Core,我们刚刚开始脱离传统的代码库,开始为我们的大多数新软件使用.net和Entity Framework核心 我们已将数据库从旧平台迁移到SQL Server,但数据陈旧且标准化程度低。由于对遗留语言中(大型)现有代码库的潜在影响,我们无法一次完成一个规范化项目,因此,我们正在向数据库中添加主键和外键定义,并随着更多表对框架有效,从头开始重新生成实体框架核心模型 我觉得这样做会遗漏实体框架核心的一些重要功能,但我对框架的了解还不够,无法确定它是什么。我知道生成的模型缺乏完整性(提示我的问题是因为具有

我们刚刚开始脱离传统的代码库,开始为我们的大多数新软件使用.net和Entity Framework核心

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

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


我的问题是:实体框架核心中有哪些能力来管理快速发展的数据库模型?我应该为自己做些什么,我应该依靠Scaffold DBContext命令做些什么?

对于EF-Core,您需要的大部分事情都将由Scaffold DBContext完成。它现在唯一没有处理的是DBQuery集。您必须手动编写这些代码。除此之外,其他一切都是由命令来处理的


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

否,它们不是版本表。数据库中只有两个,但它们还不在模型中。经检查,我们在模型中大约一半的标识列上缺少ValueGeneratedOnAdd(),我就是不明白为什么。没有必要这样做。EF Core理解标识列,不需要在添加时生成值的注释。您需要它进行版本控制的唯一原因是EF Core尚未完全实现它。哦,我明白了。设置ValueGeneratedOnAdd()的表实际上是出现在模型中的表,但不是我直接看到的表。它们的主键不是标识列(实际上应该是外键),因此标识列被定义为ValueGeneratedOnAdd()。很简单,现在你已经向我保证它应该工作可靠。谢谢