Entity framework 4 相关记录是否加载到HashSet或SortedSet?
假设我们有实体框架4的POCO类: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
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);