实体框架在某些子对象分离后,子对象的顺序错误

时间:2015-09-01 18:12:40

标签: entity-framework

我的问题是在第一个子对象分离之后,然后我将另一个子对象添加到我的parentObj,附加子对象的顺序不正确 ,我的代码看起来像这样:

parentObj= new TparentObj();
firstChildObj=new Tchild1();
secondChildObj= new Tchild1();
thirdChildObj=new Tchild1();

parentObj.Tchild1.add(firstChildObj);
parentObj.Tchild1.add(secondChildObj);
// now parentObj.Tchild1.first()==firstChildObj return true
///then for some reason
parentObj.Tchild1.remove(firstChildObj);
db.Entry(firstChildObj).State = EntityState.Detached;

// now i add third childObj  
parentObj.Tchild1.add(thirdChildObj);
//// now parentObj.Tchild1.first()==thirdChildObj return true!!

保存db后,数据库中的结果是正确的; 但是如何才能获得childObj的列表呢?

1 个答案:

答案 0 :(得分:1)

实体框架默认使用HashSets作为其集合。 HashSet并未考虑订购。

你不应该依赖它的元素排序。当前的实现似乎(正如您所经历的)在第一个未使用的位置(在您的情况下,删除的位置)添加元素,但这是一个实现细节,您不应该依赖它。

关于HashSetthe MSDN说出来(粗体是我的):

  

HashSet类提供高性能的集合操作。集合是不包含重复元素的集合,且其元素没有特定顺序

  

HashSet集合未排序,并且不能包含重复元素。如果订单或元素重复比应用程序的性能更重要,请考虑将List类与Sort方法一起使用。