我的问题是在第一个子对象分离之后,然后我将另一个子对象添加到我的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的列表呢?
答案 0 :(得分:1)
实体框架默认使用HashSets
作为其集合。 HashSet
并未考虑订购。
你不应该依赖它的元素排序。当前的实现似乎(正如您所经历的)在第一个未使用的位置(在您的情况下,删除的位置)添加元素,但这是一个实现细节,您不应该依赖它。
关于HashSet
,the MSDN说出来(粗体是我的):
HashSet类提供高性能的集合操作。集合是不包含重复元素的集合,且其元素没有特定顺序。
和
HashSet集合未排序,并且不能包含重复元素。如果订单或元素重复比应用程序的性能更重要,请考虑将List类与Sort方法一起使用。