0

updateメソッドを持つObjectContextがあります。このメソッドは、ジェネリックオブジェクトをパラメーターとして受け取ります。このオブジェクトをObjectContextにアタッチし、オブジェクトに加えられた変更でデータベースを更新する必要があります。たとえば、データベース内のエンティティと同じキーを持つ新しいオブジェクトを作成しましたが、一部のフィールドが異なります。オブジェクトをデータベース内の対応するエンティティにアタッチし、新しいオブジェクトの変更を保存してもらいたい。これが私がUpdateメソッドに持っているものです:

public void Update(BaseObject data, entitySetName)
{
    AttachTo(entitySetName, data);
    Refresh(RefreshMode.ClientWins, data);
    SaveChanges();
}

更新後、データはデータベースのフィールドによって上書きされます。更新を省略しても、データベースレコードは更新されません。私は一歩を逃していますか?

4

2 に答える 2

4

DetectChanges()メソッドは、変更が加えられた場合、entitystateを変更済みに更新します。

MSDNから:「変更追跡プロキシのないPOCOエンティティでは、DetectChangesメソッドが呼び出されると、変更されたプロパティの状態が変更済みに変更されます。変更が保存された後、オブジェクトの状態は未変更に変更されます。

context.DetectChanges();

さらに、状態を変更に設定するだけで、次の方法で何かが変更されたかどうかに関係なく、メソッドは常に更新を試みます。

ObjectStateManager.ChangeObjectState(data, EntityState.Modified);
于 2011-09-01T02:40:30.330 に答える
1

簡単に使用してください:

public void Update(BaseObject data, entitySetName)
{
    AttachTo(entitySetName, data);
    ObjectStateManager.ChangeObjectState(data, EntityState.Modified);
    SaveChanges();
}
于 2011-09-01T07:08:58.540 に答える