AsNoTracking与HasNoKey

时间:2019-09-28 15:11:07

标签: entity-framework entity-framework-core entity-framework-core-3.0

我尚不完全清楚在具有键的实体上使用AsNoTracking()与使用HasNoKey()之间有什么区别。据我了解,当使用AsNoTracking()时,即使changetracker不跟踪生成的对象上的更改,这些对象仍保留在DbContext的内存中。如果尝试使用与内存中已存在的键相同的键附加新对象,则会出现错误。 (如果我错了,请纠正我)。

如果您使用HasNoKey(以前的DbQuery <>),则行为是否相同?

1 个答案:

答案 0 :(得分:0)

介绍workbook[workbook['Bank'].isin(df44['Bank'])] ModelBuilder.Entity<>().HasNoKey()中的重大变化之一,

  

查询类型现在变成没有主键的实体类型。无键实体类型与以前版本中的查询类型具有相同的功能。

     

查询类型是一种查询数据的方法,该数据未以结构化方式定义主键。也就是说,查询类型用于映射不带键的实体类型(更可能来自视图,但可能来自表),而常规实体类型用于键可用时(更可能来自表,但可能来自表)。视图)。

您说的是

  

如果尝试使用与内存中已存在的键相同的键附加新对象,则会出现错误。 (如果我错了纠正我)。如果使用HasNoKey(以前的DbQuery <>),那么行为是否相同?

-EF核心事务中的跟踪基于实体主键。正如以上文档清楚指出的,EF Core 3.0EntityType.HasNoKey(),它没有定义任何键。因此,在QueryTypeEntityType的情况下,跟踪完全无效。

有关更多详细信息:Query types are consolidated with entity types