C#, C♯, C#相談室 P ..
505:デフォルトの名無しさん
17/03/15 09:07:02.25 k1u612YY.net
すみません、EFで質問させて下さい。
下記のようにエンティティを定義して、それを編集するクライアントを作ろうとしています。
とりあえず、Modelに対する編集は無効にしてあるものとします。Unitに変更を加えて保存すると、
DBの中でModelのレコードが増えてしまいます。NameにUnique制約を付けると当然例外が派生します。
Unit.ModelがDbContextの管理外になってしまったので、別のインスタンスとして認識されているという理屈は分かります。
contextを都度作成せずに維持していれば、期待する動作になるのも分かりますが、それはできればしたくはないです。
何か上手い解決方法はないでしょうか?
public class Model
{ public int ModelId {get;set;}
public string Name {get;set;} ※
}
public class Unit
{ public int UnitId {get;set;}
public VM Model {get;set;}
public string Serial {get;set;}
}
List<Unit> GetUnitList()
{ using (var context = ...)
{ return context.units.Include(x => x.model).Select(x => x).ToList(); }
}
void UpdateUnit(Unit unit)
{ using (var context = ...)
{ var target = context.units.Where(x => x.UnitId == unit.UnitId).FirstOrDefault()
target.Model = unit.Model;
target.Serial = unit.Serial;
context.SaveChanges();
}
}
var list = GetUnitList();
...リスト表示->エディタでunit.Serialを編集
UpdateUnit(unit);
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
2661日前に更新/292 KB
担当:undef