デタッチされたオブジェクトの変更に関するhttp://msdn.microsoft.com/en-us/library/vstudio/bb896248(v=vs.100).aspxに起因する混乱があります。
これは、デタッチされた状態でオブジェクトを変更した場合、再アタッチするときに、ApplyCurrentValues の代わりに ApplyOriginalValues を使用する必要があることを示しているようです。ただし、これを行うと、オブジェクトを再アタッチした後に変更しない限り、例のようにオブジェクトが更新されないようです。ただし、アタッチ後に変更すると、これらのどちらを使用しても問題ないようです (applyoriginal または applycurrent)。
これが私のコードです:
//this never works
private void UpdateWithOriginal(Category cat, string name)
{
using (TestContext ctx = new TestContext())
{
cat.Name = name;
ctx.Categories.Attach(cat);
ctx.ApplyOriginalValues("Categories", cat);
var state = ctx.ObjectStateManager.GetObjectStateEntry(cat).State; //never modified state here
ctx.SaveChanges();
}
}
//this always works
private void UpdateWithCurrent(Category cat, string name)
{
using (TestContext ctx = new TestContext())
{
ctx.Categories.Attach(cat);
cat.Name = name;
ctx.ApplyCurrentValues("Categories", cat);
var state = ctx.ObjectStateManager.GetObjectStateEntry(cat).State;
ctx.SaveChanges();
}
}
MSDN リンクが //this が機能しないことを示しているように見える理由を知っている人はいますか?ビットは機能するはずですか?