【问题标题】:Updating Database with Linq to Entities使用 Linq 更新数据库到实体
【发布时间】:2012-08-06 19:08:50
【问题描述】:

我可以使用 Linq to Entities 在数据库表中添加和删除。但是,以下代码不会更新数据库。 (没有例外,或任何东西 - 它只是不更新​​。):

        // Change box qty
        var pnumber = Request.Form["PartNumber"];
        var oid = Session["OOID"];
        var uid = WebSecurity.CurrentUserId;
        var newqty = Request.Form["Quantity"];
        var c = (from item in database.Carts
                           where item.UserId == 
                           uid && item.PartNumber == 
                           pnumber && item.OrderId == (string)oid
                           select item.Boxes).FirstOrDefault();
        c = newqty.AsInt();
        database.SaveChanges();
        Response.Redirect("~/Protected/Account/Shopping/Cart");

任何想法我可能做错了什么,或者如何解决这个问题?我搜索了 Stack Overflow 并尝试了 Answers 和 Google 中提供的各种示例,但它们几乎都一样,并没有帮助。

【问题讨论】:

  • 你需要抓取整个实体并更新它,而不仅仅是一个特定的字段。获取该字段后,您将拥有一个与数据库完全断开连接的 int 变量,存储在 c 中。

标签: c# .net linq entity-framework ado.net


【解决方案1】:

您基本上需要检索实体(记录)本身而不仅仅是属性(列)才能通过 EF 更新它:

var newqty = Request.Form["Quantity"]; 
var c = (from item in database.Carts
           where item.UserId == 
           uid && item.PartNumber == 
           pnumber && item.OrderId == (string)oid
           select item).FirstOrDefault();
c.Boxes = newqty.AsInt();
database.SaveChanges();

【讨论】:

  • 哦,我也试过了(最初)——我会给你提供异常细节。
  • 嗯,奇怪。今天它没有抛出异常。但它仍然不会更新。我认为问题可能出在其他地方。
  • 我已经对所有内容进行了三重检查。从将(作为查询字符串)数据传递到 editquantity 页面的购物车页面,到实际“更新”数据库的代码。一切都是它应该的样子。我不明白。
  • @EvilCokeMachine 这对您的情况应该没有任何影响,但可以肯定的是,您是否尝试将实体的状态设置为已修改?像这样:database.ObjectStateManager.ChangeObjectState(c, EntityState.Modified);
  • @Xander - 我不知道,谢谢。我刚刚试了一下,它给出了以下异常:ObjectStateManager does not contain an ObjectStateEntry with a reference to an object of type 'System.Int32'
【解决方案2】:

这是@Xander 使用 Lambda 的答案

var newqty = Request.Form["Quantity"]; 
var c = database.Carts.Where(x => x.UserId == 
           uid && x.PartNumber == 
           pnumber && x.OrderId == (string)oid).FirstOrDefault();
c.Boxes = newqty.AsInt();
database.SaveChanges();

我知道你说你对他有一个错误,这更多是为了你的教育目的:)

【讨论】:

  • 感谢您的帮助。我不知道为什么,但是这个完全相同的代码(你提供的,我几天前最初尝试过的)不起作用,但今天它起作用了。奇怪,但很好:)
猜你喜欢
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多