4

いくつかのテーブルを更新する方法があります。更新するには、最初に取得する必要がありますがTestProcess、それは好きではありません。更新操作のみに使用され、操作TestProcessなしで更新するにはどうすればよいですか?select(firstOrDefault)

メソッドの例:

public void UpdateTestProcess(int id, string updateID)
{
    using (TestEntities context = new TestEntities())
                {
                    TestProcess pr = context.TestProcess.FirstOrDefault(x => x.MyID == id);
                    pr.UpdateID = updateID;             

                    context.TestProcess.Attach(pr);
                    context.ObjectStateManager.ChangeObjectState(pr, EntityState.Modified);
                    context.SaveChanges();
               }
}
4

3 に答える 3

7
TestProcess pr = new TestProcess()
{
    MyID == id,
};

context.Set<TestProcess>().Attach(pr);

pr.UpdateID = updateID;

context.SaveChanges();

値をそのタイプのデフォルト値に設定している場合 (たとえば、 を to に設定しint0いる場合)、変更として取得されず、状態を手動で設定する必要があります。

pr.UpdateID = updateID;
context.Entry(pr).Property(p => p.UpdateID).IsModified = true;

このようなコードは拡張メソッドに入れることができるので、次のようなことができます (実装は演習として残します)。

Foo entity = this.DbContext.GetEntityForUpdate<Foo>(
    item => item.ID, model.ID
    );

this.DbContext.UpdateProperty(entity, item => item.Name, model.Name);
于 2013-07-03T08:10:58.397 に答える
2

そのようにすることができます(おそらくすべてのテストプロセスデータが必要です):

TestProcess pr = new TestProcess();

pr.Id = id;
pr.UpdateID = updateID;

context.Attach(pr);
context.ObjectStateManager.ChangeObjectState(pr, EntityState.Modified);
context.SaveChanges();
于 2013-07-02T13:42:46.810 に答える