##環境
・VS2017 (.NetFramework4.6.1)
・C#
・Windows Form
・EntityFramework 6.2
・SQL Serverへのアクセス
#分からない事
外部キーで繋げているテーブルにもAddOrUpdateで更新させる方法が分からない。
#現状での更新方法と出来ていない事の具体例
テーブルA 1:多 テーブルB 1:多 テーブルC
となっているようなテーブル構造を私は構築しました。
EFでのモデルを超簡略化させるといかのようなイメージです。
C#
1public partial class ModelA 2{ 3 public string Hoge { get; set; } 4 public virtual ICollection<ModelB> ModelBs { get; set; } 5} 6 7public partial class ModelB 8{ 9 public string Fuga { get; set; } 10 public virtual ICollection<ModelC> ModelCs { get; set; } 11} 12 13public partial class ModelC 14{ 15 public virtual string Fugo { get; set; } 16}
今は以下の様に更新をかけています。
C#
1var modelA = new ModelA(); 2 3foreach(var item in HogeCollection) 4{ 5 var modelB = new ModelB(); 6 modelB.Fuga = "nn"; 7 foreach(var item2 in FugaCollection) 8 { 9 var modelC = new ModelC(); 10 modelC.Fugo = "abc"; 11 modelB.ModelCs.Add(modelC); 12 } 13 14 modelA.ModelBs.Add(modelB); 15} 16 17using (var context = new Context()) 18{ 19 context.ModelAs.AddOrUpdate(modelA); 20 await context.SaveChangesAsync(); 21}
この方法だと、
テーブルAに対しては AddOrUpdateが正しくかかりますが、
一度更新した後に、テーブルB, テーブルCの一部だけレコード削除をして
全く同じ内容で再度、AddOrUpdateをした場合にテーブルB, テーブルCに対してAddされません。
どのようにすれば、一度更新がかかった後で外部キーで繋げているテーブルにもAddOrUpdateで更新できるのでしょうか。
ちなみに、ここでいう
ModelA には 7万件、
ModelB には 50万件
ModelC には 500万件のレコードが入っています。
パフォーマンスも考慮された回答であればなお嬉しいです。
あなたの回答
tips
プレビュー