C#, C♯, C#相談室 Part92 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0487デフォルトの名無しさん
2017/03/15(水) 09:07:02.25ID:k1u612YY下記のようにエンティティを定義して、それを編集するクライアントを作ろうとしています。
とりあえず、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);
■ このスレッドは過去ログ倉庫に格納されています