WPFのコンパイルでセルフトラッキングエンティティを使用するときに問題が発生します。
たとえば、PeopleとNumbersの2つのエンティティが設定されています。それぞれの人には多くの番号があり、多くの番号に人がいる可能性があります。
ここに私が番号の削除を期待するサンプルコードがあります:
using (var db = new Model.SampleEntities())
{
list = db.People.Include("Numbers").ToList();
}
var samplePerson = list[0];
samplePerson.StartTracking();
var number = samplePerson.Numbers.First();
p.Numbers.Remove(number);
using (var db = new Model.SampleEntities())
{
foreach (Model.Person person in list)
{
db.People.ApplyChanges(person);
}
db.SaveChanges();
}
DBから番号を削除することはありません。
RemoveItemメソッドをオーバーライドしてTrackableCollectionクラス(Self-Tracking T4テンプレートによって生成される)を変更し、次のコードを追加すると、期待どおりに機能します。
protected override void RemoveItem(int index)
{
var entity = ((IObjectWithChangeTracker)this[index]);
base.RemoveItem(index);
entity.MarkAsDeleted();
}
ここにMarkAsDeletedメソッドを配置するのは正しいですか?したがって、TTファイルを変更して、このコードをTrackableCollectionクラスに配置する必要があります。それは良いアプローチですか?