2016-02-11 36 views
0

我正在編碼一個Web API 2 web服務,並希望在編輯對象之前獲取對象的值在DbSet中有所幫助。如何在數據庫中編輯對象之前獲取對象的值?

我已經做了一些研究,我相信我需要使用ObjectStateEntry對象。但是,我不確定如何使用ObjectStateEntry對象獲取對象的值。

下面是一些代碼的簡單放功能,我認爲應該工作:

// 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' does not contain a definition for 'ObjectStateManager' and no extension method 'ObjectStateManager' accepting a first argument of type 'DataService.Context.DataServiceContext' could be found (are you missing a using directive or an assembly reference?)

是否有人可以幫助我得到的值對象,在數據庫中編輯對象之前?

回答

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庫的源代碼

相關問題