Entity framework 4 相关记录是否加载到HashSet或SortedSet?

Entity framework 4 相关记录是否加载到HashSet或SortedSet?,entity-framework-4,Entity Framework 4,假设我们有实体框架4的POCO类: public class Order { public long Id { get; set; } public ISet<OrderItem> OrderItems { get; set; } } 因此,假设我们这样做: Order myOrder = GetOrder(1); myOrder.OrderItems是哈希集还是SortedSet?有没有办法控制这个问题?好问题 据我所知(据我所知,没有MSDN/blog/art

假设我们有实体框架4的POCO类:

public class Order
{
    public long Id { get; set; }
    public ISet<OrderItem> OrderItems { get; set; }
}
因此,假设我们这样做:

Order myOrder = GetOrder(1);
myOrder.OrderItems是哈希集还是SortedSet?有没有办法控制这个问题?

好问题

据我所知(据我所知,没有MSDN/blog/article可以消除/证明这一点),导航属性可以是任何类型,只要它实现了
ICollection

HashSet
SortedSet
都实现了
ICollection
,因此两者都是可行的候选者

你查过密码了吗?您应该能够看到解决了哪个具体类

大多数人使用
ICollection
/
IList
。为什么要将属性声明为
ISet

为什么不直接声明所需的类型,而不是接口呢


或者您可以尝试使用依赖项注入(
For().Use()
)。

顺便说一句,我假设
public long ISet
是一个输入错误:)调试时检查类型的极好建议。不知道为什么我没有想到这件事。。似乎默认情况下,EF4将在SortedSet上使用HashSet。同样有趣的是,当我换成IList时,一切都很好。所以我猜EF4使用了很多反射,比如类属性的类型,并且它基于此声明了一个实例。“如果能看到一篇文章来解释这个系统的内部工作原理,那就太好了。”尼亚尔同意。它不像MVC那样可以查看源代码。:)我知道很多EF POCO都是基于惯例的。我个人只使用
ICollection
Order myOrder = GetOrder(1);