实体框架 - 相关的ICollection实现了HashSet

Jef*_*fim 6 entity-framework poco hashset entity-framework-4 entitycollection

我在我的项目中使用EntityFramework POCO +代理+延迟加载.今天,我很奇怪为什么看到该类Transaction具有其相关集合Rows物化到HashSet(而不是EntityCollection).我需要EntityCollection跟踪集合中的更改.

public class Transaction
{
    public virtual ICollection<TransactionRow> Rows { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然而,其他实体类将其相关集合具体化EntityCollection.

我正在加载Transaction通过ObjectQuery,所以它应该在上下文中.还创建了对象的代理.

任何人都可以告诉 - 实体框架如何决定使用什么 - HashSet或EntityCollection?为什么有些东西会成为HashSets?

Lad*_*nka 2

仅当满足以下两个条件时才会创建更改跟踪代理:

  • POCO类是公开的、非密封的、非抽象的
  • 所有持久化属性(带有 getter 和 setter)都被标记为虚拟