0

私は Web サービスをコーディングしています。Web API 2オブジェクトを .xml ファイルで編集する前に、オブジェクトの値を取得する方法を教えてDbSetください。

私はいくつかの調査を行い、ObjectStateEntryオブジェクトを使用する必要があると考えています。ただし、オブジェクトを使用してオブジェクトの値を取得する方法がわかりませんObjectStateEntry

これは、動作すると思われるいくつかのコードを含む単純な put 関数です。

// PUT: api/Templates1/5
[ResponseType(typeof(void))]
public async Task<IHttpActionResult> PutTemplate(int id, Template template)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    if (id != template.id)
    {
        return BadRequest();
    }

    ObjectStateEntry myObjectState = db.ObjectStateManager.GetObjectStateEntry(template);
    var originalValues = myObjectState.OriginalValues;

    db.Entry(template).State = EntityState.Modified;

    try
    {
        await db.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!TemplateExists(id))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return StatusCode(HttpStatusCode.NoContent);
}

次のエラーが表示されます。

'DataService.Context.DataServiceContext' には 'ObjectStateManager' の定義が含まれておらず、タイプ 'DataService.Context.DataServiceContext' の最初の引数を受け入れる拡張メソッド 'ObjectStateManager' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか? ?)

オブジェクトがデータベースで編集される前に、誰かがオブジェクトの値を取得するのを手伝ってくれませんか?

4

1 に答える 1

0

ObjectStateManager は ObjectContext のプロパティです

using (var ctx = new TestContext())
{
    var first = ctx.Entity_Basics.First();
    var objectStateEntry = ((IObjectContextAdapter)ctx).ObjectContext.ObjectStateManager.GetObjectStateEntry(first);


    //ctx.Entity_Basics.Delete();
    //ctx.Entity_Basics.Update(x => new Entity_Basic() { ColumnInt = 2 });
}

さらにヘルプが必要な場合は、私のEntityFramework Plus Auditライブラリのソース コードを確認してください。

于 2016-02-11T03:20:44.753 に答える