2016-04-06 4 views
1

オブジェクトをリストに挿入しようとしています。C#Linqを使用してObjをリストに挿入

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(); 

私はそれがデータベース内のインデックスを保存していないことに気づくのではなく、別のエントリを追加します。次に利用可能なIDでだから、私が言っていることは、値を挿入すると主キーを再配置しないということです。

insertメソッドを使用せず、各子要素に対してdb.Entry()= EntityState.Modifiedを使用する方が良いですか?

アドバイスはありますか?

+0

EFは、あなたが更新している何行を知っているID(​​主キー)を使用しています。だから、これはあなたが思うほど単純ではありません。基本的には、そのインデックスのアイテムを新しい値で更新し、次のものをすべて前のものに更新し、最後の値を新しいものにする必要があります(あなたのリストはIDによって順序付けられていると仮定します。身元)。最初に行う必要はないので、デザインを再検討したいかもしれませんが、 – juharr

+0

はい、それは私がもう一度各要素を修正しなければならない第2の提案になるでしょう。あなたは、デザインはあなたがソートの値としてID /プライマリキーを使用しないことについて話していると言っていますか? –

+0

私はなぜあなたのプライマリキーのIDによって "中間"に新しい要素を挿入する必要があるのですか?あなたが維持する必要がある注文がある場合、別の列を使用することもできますが、再度注文を変更するだけで多くの更新が必要になります。 – juharr

答えて

0

.ToList()を使用すると新しいインスタンスが作成されるため、SaveChangesを実行すると、EFはこの新しいインスタンスを認識しないため、テーブルに新しい項目が挿入されます。

あなたはここで良い例を見ることができます:http://www.entityframeworktutorial.net/update-one-to-many-entities-in-entity-framework.aspx

+0

私のコードを少し更新したからです。したがって、実際にはオブジェクト内のネストされたListです。それは私が間違っていない限り、私は新しいインスタンスを作成しているとは思わないと言われています。そこから、ネストされたリストに値を挿入します。 –

関連する問題