我尚不完全清楚在具有键的实体上使用AsNoTracking()与使用HasNoKey()之间有什么区别。据我了解,当使用AsNoTracking()时,即使changetracker不跟踪生成的对象上的更改,这些对象仍保留在DbContext的内存中。如果尝试使用与内存中已存在的键相同的键附加新对象,则会出现错误。 (如果我错了,请纠正我)。
如果您使用HasNoKey(以前的DbQuery <>),则行为是否相同?
答案 0 :(得分:0)
介绍workbook[workbook['Bank'].isin(df44['Bank'])]
是ModelBuilder.Entity<>().HasNoKey()
中的重大变化之一,
查询类型现在变成没有主键的实体类型。无键实体类型与以前版本中的查询类型具有相同的功能。
查询类型是一种查询数据的方法,该数据未以结构化方式定义主键。也就是说,查询类型用于映射不带键的实体类型(更可能来自视图,但可能来自表),而常规实体类型用于键可用时(更可能来自表,但可能来自表)。视图)。
您说的是
如果尝试使用与内存中已存在的键相同的键附加新对象,则会出现错误。 (如果我错了纠正我)。如果使用HasNoKey(以前的DbQuery <>),那么行为是否相同?
-EF核心事务中的跟踪基于实体主键。正如以上文档清楚指出的,EF Core 3.0
和EntityType
是.HasNoKey()
,它没有定义任何键。因此,在QueryType
与EntityType
的情况下,跟踪完全无效。