Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

UWPでEntity Framework 管理外のオブジェクトを変更監視に追加する

$
0
0

一旦DBからとってきたデータを暫く手元に置いておいて、後で更新したいということってありますよね。Entity Frameworkのデフォルトの挙動だと、DbSetから取得したデータに対する変更は監視して、いい感じにSaveChangesのときにDBに反映してくれます。

ただ、別のDbContextから取得したオブジェクトや手元でnewしたオブジェクトは、そのままではいい感じに変更監視してくれません。 そんな時に使えるのがDbSetのAttachメソッドです。Attachにオブジェクトを渡すと変更監視してくれます。 また、Attachの戻り値のEntityEntryのStateをEntityState.Modifiedにすることで、変更があったとマークすることが出来ます。

コードで書くと以下のような感じです。

var p = default(Person);
using (var ctx = new SampleContext())
{
    p = new Person { Name = "Tanaka" };
    ctx.People.Add(p);
    ctx.SaveChanges();
}

p.Name = "Kimura";

using (var ctx = new SampleContext())
{
    var tracker = ctx.People.Attach(p);
    tracker.State = Microsoft.Data.Entity.EntityState.Modified;
    ctx.SaveChanges();
}

using (var ctx = new SampleContext())
{
    p = ctx.People.First();
    Debug.WriteLine($"{p.Id} {p.Name}");
    ctx.SaveChanges();
}

Viewing all articles
Browse latest Browse all 1387

Trending Articles