使用c#Linq将Obj插入列表

使用c#Linq将Obj插入列表,c#,mysql,asp.net,linq,C#,Mysql,Asp.net,Linq,我正在尝试将对象插入列表中 childModel childElement= new childModel; parentModel myList = db.list.Where(e => e.id.equals(someId)).Include("someNestedList").FirstOrDefault(); childElement.prop1 = true; myList.someNestedList.Insert(index, childElement); 因此

我正在尝试将对象插入列表中

 childModel childElement= new childModel;

 parentModel myList = db.list.Where(e => e.id.equals(someId)).Include("someNestedList").FirstOrDefault();

 childElement.prop1 = true;
 myList.someNestedList.Insert(index, childElement);
因此,我注意到,从这里开始,一切都可以正常工作,因为它将在适当的索引处将子对象插入列表中。当我尝试保存此列表时,问题出现了

 db.Entry(myList).State = EntityState.Modified;
 db.SaveChanges();
我注意到它没有将索引保存在数据库中,而是添加了另一个条目。所以我要说的是,一旦我插入值,它就不会重新排列主键

不使用insert方法而只为每个子元素使用db.Entry()=EntityState.Modified是否更好

有什么建议吗?

当您使用.ToList()时,您正在创建一个新实例,因此当您保存更改时,EF不知道这个新实例,因此它将在您的表中插入一个新项

您可以在这里看到一个很好的示例:

当您使用.ToList()时,您正在创建一个新实例,因此当您保存更改时,EF不知道这个新实例,因此它将在您的表中插入一个新项


您可以在这里看到一个很好的示例:

EF使用id(主键)来了解您正在更新的行。所以,这并不像你想象的那么简单。基本上,您需要使用新值更新该索引处的项,并使用上一个值更新以下所有项,并使用上一个值创建一个新项(假设您的列表按id排序,我们讨论的是标识)。虽然你可能想重新考虑你的设计,所以你不需要在一开始就这样做。是的,这将是我的第二个建议,你将不得不再次修改每个元素。当你说设计时,你是说不使用id/主键作为排序的值吗?我的意思是为什么你需要在主键id的“中间”插入一个新元素?如果您需要维护一个订单,那么可能需要使用一个单独的列来进行维护,但同样,为了更改订单,您必须进行大量更新。我使用我的主键id进行排序,而不是创建一个新列。我想在中间插入一个新的元素,因为它实际上是一个NeStdLIST(由我更新的代码阐明)EF使用ID(主键)来知道您正在更新的行。所以,这并不像你想象的那么简单。基本上,您需要使用新值更新该索引处的项,并使用上一个值更新以下所有项,并使用上一个值创建一个新项(假设您的列表按id排序,我们讨论的是标识)。虽然你可能想重新考虑你的设计,所以你不需要在一开始就这样做。是的,这将是我的第二个建议,你将不得不再次修改每个元素。当你说设计时,你是说不使用id/主键作为排序的值吗?我的意思是为什么你需要在主键id的“中间”插入一个新元素?如果您需要维护一个订单,那么可能需要使用一个单独的列来进行维护,但同样,为了更改订单,您必须进行大量更新。我使用我的主键id进行排序,而不是创建一个新列。我想在中间插入一个新的元素,因为它实际上是一个NestStRead(通过我的更新代码阐明),我更新了我的代码。所以它实际上是一个嵌套在对象中的列表。也就是说,我不认为我在创建一个新实例,除非我错了。从那里我将在嵌套列表中插入一个值。我稍微更新了我的代码。所以它实际上是一个嵌套在对象中的列表。也就是说,我不认为我在创建一个新实例,除非我错了。从那里我将在嵌套列表中插入一个值。