次のコードを使用します。
using (ICMSEntities db = new ICMSEntities())
{
productObj.Sectors.Clear();
int[] selected_sectors = cblSectors.Items.Cast<ListItem>()
.Where(n => n.Selected).Select(n => Convert.ToInt32(n.Value)).ToArray();
for (int i = 0; i < selected_sectors.Length; i++)
{
int SectorID = selected_sectors[i];
Sector sectorObj = db.Sectors.SingleOrDefault(x => x.sector_id == SectorID);
productObj.Sectors.Add(sectorObj);
}
db.SaveChanges();
Response.Redirect("~/Products.aspx", true);
}
多対多の関係テーブルを更新しようとしています。各セクターには一連の製品を含めることができ、各製品には一連のセクターを含めることができます。製品エンティティを更新しようとすると、ユーザーが上記のチェックボックス リストから他の使用可能なセクターを選択した場合に備えて、すべてのセクターをクリアしています.Clear()
。次に、チェックボックスリストから読み取り、更新します。レコードを更新する代わりに、新しい自動インクリメント ID を持つ製品で新しい同一の行を取得しています。したがって、更新ではなく挿入を行っており、指定したことはありません.AddObject()
。
ここで何が間違っていますか?または、これを正しく実装するにはどうすればよいですか?
ありがとう。