我正在将应用程序从EF 6迁移到EF Core 2.2。我有一个包含一些相关对象的对象,每个对象都有数据库生成的ID和GUID(数据库 - PostgreSQL)。
我正在尝试创建一个通用方法,以与EF 6相同的方式添加整个对象图及其所有相关对象 - 就像这样:
在插入之前,EF会创建临时ID,这些ID将被真实的数据库ID替换。
因此,在不同对象中,我可能会有完全相同的对象(为了更好的理解,我的主题领域是医学,我有几个不同的分析是从同一样本进行的),在EF Core中,我不能像这样添加整个对象图形 - 会收到错误消息,例如:
“Key(“ID”)=(5)已经存在”
但在EF6版本中,所有对象都可以被插入,包括具有正确ID和GUID的内部对象,没有重复项。
在两个版本中,同一对象中的临时ID也是相等的,但只有在EF Core版本中,我才会遇到这个错误。
我尝试了添加属性。
我正在尝试创建一个通用方法,以与EF 6相同的方式添加整个对象图及其所有相关对象 - 就像这样:
var res = context.Set<T>().Add(entity);
在插入之前,EF会创建临时ID,这些ID将被真实的数据库ID替换。
因此,在不同对象中,我可能会有完全相同的对象(为了更好的理解,我的主题领域是医学,我有几个不同的分析是从同一样本进行的),在EF Core中,我不能像这样添加整个对象图形 - 会收到错误消息,例如:
“Key(“ID”)=(5)已经存在”
但在EF6版本中,所有对象都可以被插入,包括具有正确ID和GUID的内部对象,没有重复项。
在两个版本中,同一对象中的临时ID也是相等的,但只有在EF Core版本中,我才会遇到这个错误。
我尝试了添加属性。
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
尝试更改DbContext
modelBuilder.Entity<Sample>().Property(e => e.ID).ValueGeneratedOnAdd();
但是对我都不起作用 - 我认为问题并不在这里。
此外,我在Microsoft文档中找到了这篇文章,其中提到:
如果图表中包含重复项,则需要在将其发送到EF之前处理图表,以将多个实例合并为一个。
但我不确定 - 这是否与我的情况有关?
我做错了吗,还是在EF Core 2.2中不可能实现这一点?