如何在数据库中编辑对象之前获取对象的值?

时间:2016-02-11 02:42:03

标签: c# entity-framework objectstatemanager

我正在编写一个Web API 2网络服务,并且想要在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'而没有扩展方法'ObjectStateManager'   接受第一个类型的参数   可以找到'DataService.Context.DataServiceContext'(是吗?   缺少using指令或程序集引用?)

在数据库中编辑对象之前,有人可以帮助我获取对象的值吗?

1 个答案:

答案 0 :(得分: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资料库

的源代码