7

EF Code-First で、スタブ オブジェクトを使用して db の行全体をクエリせずに更新することは可能ですか...

例えば

public class Dinner 
{     
    public int DinnerID { get; set; }     
    public string Title { get; set; }     
    public DateTime EventDate { get; set; }     
    public string Address { get; set; }     
    public string Country { get; set; }     
    public string HostedBy { get; set; }       
}



Dinner dinner = dinner.DinnerID = 1;     
dinner.HostedBy = "NameChanged" 
nerdDinners.SaveChanges();

上記のコードは、DinnerID 1 の行に対して次の列を null にする Update ステートメントを作成しますか?

タイトル、EventDate、住所、国

"PropertyModified" = true のような方法またはメソッドはありますか?残りはそれらを = false にして、HostedBy だけが更新されるようにしますか?

4

4 に答える 4

4

ApplyCurrentValuesを探していると思います

public void UpdateDinner(Dinner existingDinner)
{
    var stub = new Dinner { DinnerId = existingDinner.DinnerId };
    ctx.Dinners.Attach(stub);
    ctx.ApplyCurrentValues(existingDinner);
    ctx.SaveChanges();
}

ApplyCurrentValuesは、スカラー値を既存のオブジェクトからグラフ内のオブジェクト (上記の場合はスタブ エンティティ) にコピーします。

MSDNの備考セクションから:

オブジェクトの元の値と異なる値は、変更済みとしてマークされます。

それはあなたの後ですか?

于 2010-12-15T10:07:15.470 に答える
1

ポールの答えに基づいて構築するには、EFモデルまたはデータベースファーストを使用している場合、次のことが機能します。

context.ObjectStateManager.GetObjectStateEntry(dinner).SetModifiedProperty("HostedBy");
于 2011-06-21T21:58:23.777 に答える
0

おそらくこれを試してみてください.EF Code Firstに固有のものであり、EFだけとは異なる方法で実行しているようです.

var dinner = context.Dinners.Find(1);

context.Entry(dinner).Property(d => d.HostedBy).IsModified = true;

context.SaveChanges();

ADO.NETチームのブログより

「プロパティを変更済みとしてマークすると、プロパティの現在の値が元の値と同じであっても、SaveChanges が呼び出されたときにプロパティの更新が強制的にデータベースに送信されます。」

于 2011-02-03T21:02:36.750 に答える
0

Attach()メソッドを探していると思います。

于 2010-12-15T09:44:11.727 に答える