我正在编写一个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指令或程序集引用?)
在数据库中编辑对象之前,有人可以帮助我获取对象的值吗?
答案 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资料库
的源代码