我是C#的新手,正在使用OData和Owinselfhost,问题是当我尝试对我的Object Person进行更新时总是收到此错误消息The context is not currently tracking the entity我的控制器 [HttpPut] [Route()] // PUT api/people/5 public IHttpActionResult Put([FromBody]Person value) { Console.WriteLine("Value updated " + value.LastName); var result = api.updatePerson(value); if (result == false) return BadRequest("An error occurred"); return Ok("Person updated"); }API服务 public bool updatePerson(Person p) { try { var ctx = GetAppControlContext(); Person person = new Person(); person = ctx.People.Where(ps => ps.Id == p.Id).SingleOrDefault(); if (person != null) { //person.FirstName = p.FirstName; person = p; Console.WriteLine("Name" + person.FirstName); ctx.UpdateObject(person); ctx.SaveChanges(); } Console.WriteLine("person updated"); return true; } catch (Exception ex) { Console.WriteLine(ex.ToString()); return false; } }PS 只有当我像这样逐个字段分配给人时才起作用 public bool updatePerson(Person p) { try { var ctx = GetAppControlContext(); Person person = new Person(); person = ctx.People.Where(ps => ps.Id == p.Id).SingleOrDefault(); if (person != null) { person.FirstName = p.FirstName; person.LastName= p.LastName; person.age= p.age; Console.WriteLine("Name" + person.FirstName); ctx.UpdateObject(person); ctx.SaveChanges(); }
2 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
没错,仅当您单独分配每个字段时,代码才有效。因为Person
是引用类型。
您有两个的实例Person
,p
并且person
这些变量只是指向您的实例的指针。当您编写时,person = p;
两个指针都指向同一个实例,该实例未被您的上下文跟踪。
因此,您需要分配每个字段,但是如果您拥有大量文件,则可以使用它AutoMapper
来简化您的工作。
- 2 回答
- 0 关注
- 213 浏览
添加回答
举报
0/150
提交
取消