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



我的问题是在第一个子对象分离之后,然后我将另一个子对象添加到我的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后,database中的结果是正确的;但是我怎样才能按照添加的顺序得到childdobj的列表呢?

Entity Framework默认使用HashSets作为集合。HashSet不考虑排序。

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

关于HashSet, MSDN说它(粗体是我的):

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

HashSet集合没有排序,不能包含重复的元素。如果顺序或元素重复对应用程序来说比性能更重要,请考虑将List类与Sort方法一起使用。

相关内容

最新更新