オブジェクトをリストに挿入しようとしています。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を使用する方が良いですか?
アドバイスはありますか?
EFは、あなたが更新している何行を知っているID(主キー)を使用しています。だから、これはあなたが思うほど単純ではありません。基本的には、そのインデックスのアイテムを新しい値で更新し、次のものをすべて前のものに更新し、最後の値を新しいものにする必要があります(あなたのリストはIDによって順序付けられていると仮定します。身元)。最初に行う必要はないので、デザインを再検討したいかもしれませんが、 – juharr
はい、それは私がもう一度各要素を修正しなければならない第2の提案になるでしょう。あなたは、デザインはあなたがソートの値としてID /プライマリキーを使用しないことについて話していると言っていますか? –
私はなぜあなたのプライマリキーのIDによって "中間"に新しい要素を挿入する必要があるのですか?あなたが維持する必要がある注文がある場合、別の列を使用することもできますが、再度注文を変更するだけで多くの更新が必要になります。 – juharr