在实体framewok中使用DBcontext更新实体不起作用

时间:2017-02-01 23:05:54

标签: c# entity-framework

我有一个项目我正在使用通过实体数据模型连接的数据库,我使用DBcontext来创建和更新实体。

我的创建方法(如下)工作正常。

[HttpPost]
public IHttpActionResult PostCustomer([FromBody] Customer Customer)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    using (var dbCtx = new CustomerDBEntities())
    {
        dbCtx.Customers.Add(Customer);
        dbCtx.SaveChanges();

    }
    return CreatedAtRoute("DefaultApi", new { id = Customer.id }, Customer);
}

但是我的更新方法什么也没做。我没有得到错误或任何似乎没有任何事情发生。它没有更新值。 代码就是这个

[HttpPut]
public IHttpActionResult UpdateCustomer([FromBody] Customer Customer)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    Customer cust;
    var ctx = new CustomerDBEntities();
    cust = ctx.Customers.Where(s => s.id == Customer.id).FirstOrDefault<Customer>();
    if (cust != null)
    {
        cust.Customer_Name = Customer.Customer_Name;
        cust.email = Customer.email;
        cust.Customer_address = Customer.Customer_address;

    }

    ctx.Entry(cust).State = System.Data.EntityState.Modified;
    ctx.SaveChanges();


    return CreatedAtRoute("DefaultApi", new { id = Customer.id }, Customer);
}

当我以前使用SQL命令直接转到数据库时,它工作正常,但自从我更改它后它就停止了工作。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

在属性级别添加更改

context.Entry(Customer).Property(cust => cust.Customer_Name).IsModified = true; 

此处更多详情https://msdn.microsoft.com/en-us/data/jj592677

此处也回答了类似的问题https://stackoverflow.com/a/15339512/1481690

答案 1 :(得分:1)

删除此行代码。

print'run %sr()'%('doze','ca')[0<a<b<3]

EF跟踪对上下文中实体所做的更改,您无需告诉它已被修改。