Entity framework 实体框架相关的ICollection被具体化到HashSet中

Entity framework 实体框架相关的ICollection被具体化到HashSet中,entity-framework,entity-framework-4,poco,hashset,entitycollection,Entity Framework,Entity Framework 4,Poco,Hashset,Entitycollection,我在项目中使用EntityFramework POCO+代理+延迟加载。今天,我非常惊讶地看到类事务将其相关集合行具体化为哈希集(而不是实体集合)。我需要EntityCollection来跟踪集合中的更改 public class Transaction { public virtual ICollection<TransactionRow> Rows { get; set; } } 公共类事务 { 公共虚拟ICollection行{get;set;} } 但是,其他实体

我在项目中使用EntityFramework POCO+代理+延迟加载。今天,我非常惊讶地看到类
事务
将其相关集合
具体化为
哈希集
(而不是
实体集合
)。我需要
EntityCollection
来跟踪集合中的更改

public class Transaction
{
    public virtual ICollection<TransactionRow> Rows { get; set; }
}
公共类事务
{
公共虚拟ICollection行{get;set;}
}
但是,其他实体类将其相关集合具体化为
EntityCollection

我正在通过
ObjectQuery
加载
事务
,因此它应该在上下文中。还将创建对象的代理


有人能告诉我们实体框架是如何决定使用什么的吗?HashSet还是EntityCollection?为什么有些东西会变成哈希集?

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

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

哎哟,我刚刚再次检查了这个类,发现这个集合没有标记为虚拟的:)谢谢你的提示!