ASP.NET MVC 4 EF Update操作

时间:2012-05-18 12:18:00

标签: asp.net-mvc entity-framework

假设我有一个包含30个字段的表,我想显示(Edit.cshtml)2个字段(GET)和更新(公共ActionResutl编辑(项目,项目))仅4个字段

Edit.cshtml:RegNo = 1002 |值= 50

ItemsController:

        public ActionResult Edit(items items)
        {
           if (ModelState.IsValid)
           {
              db.items.Attach(items);
              items.DateAdd = DateTime.Now;
              items.Status = 2;
              db.SaveChanges();
           }
        }

问:如何只更新30个这4个字段?

我是否必须添加26个Html.HiddenFor()助手? ||创建一个包含4个字段的小类并尝试更新( TryUpdateModel,ApplyCurrentValues )?

编辑:我只更新了一行。

SQL:

UPDATE dbo.items SET Status = 2, RegNo = items.RegNo WHERE id = items.id -- i don't care about the other fields

3 个答案:

答案 0 :(得分:5)

以下是我在控制器中的actionresult方法中所做的事情

[HttpPost]
public ActionResult Edit(Items items)
{
db.Items.Single(ItemID => ItemID.ID == items.ID).<First Column to update> = <the value needed>;
db.Items.Single(ItemID => ItemID.ID == items.ID).<Second Column to update> = <the value needed>;
db.Items.Single(ItemID => ItemID.ID == items.ID).<Third Column to update> = <the value needed>;
db.Items.Single(ItemID => ItemID.ID == items.ID).<Fourth Column to update> = <the value needed>;
db.SaveChanges();
return RedirectToAction("index");
}

让我们继续举例

[HttpPost]
public ActionResult Edit(Items items)
{
db.Items.Single(ItemID => ItemID.ID == items.ID).Status = 2;
db.Items.Single(ItemID => ItemID.ID == items.ID).Barcode = Abc12345;
db.Items.Single(ItemID => ItemID.ID == items.ID).RegNo = 1002;
db.Items.Single(ItemID => ItemID.ID == items.ID).Manufacturer = Tomato Soup Inc;
db.SaveChanges();
return RedirectToAction("index");
}

答案 1 :(得分:2)

您需要包含所有字段或在帖子中查找对象,并且只更改感兴趣的字段。

答案 2 :(得分:1)

只有单个字段在MVC4 EF&amp;本准则是正确的工作。

db.Booking_transactions.Single(b => b.BookingId == booking_transaction.BookingId ).booking_status = 2;