为了账号安全,请及时绑定邮箱和手机立即绑定

C#上下文当前未跟踪实体错误APi。关于更新方法

C#上下文当前未跟踪实体错误APi。关于更新方法

C#
MM们 2021-03-30 21:14:42
我是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是引用类型。

您有两个的实例Personp并且person这些变量只是指向您的实例的指针。当您编写时,person = p;两个指针都指向同一个实例,该实例未被您的上下文跟踪。

因此,您需要分配每个字段,但是如果您拥有大量文件,则可以使用它AutoMapper来简化您的工作。


查看完整回答
反对 回复 2021-04-17
  • 2 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信