更新Linq2Sql对象在MVC中提供了异常

时间:2010-10-03 11:58:13

标签: asp.net-mvc linq-to-sql

net MVC Web应用程序。我有一个数据库,我已经建立了我的模型,我使用Linq2SQL来构建我的业务逻辑层。在我的应用程序中,我有一个客户对象,当我调用我的“editCystomer”页面时,我传入一个Customer来填充textBoxes:

[AcceptVerbs(HttpVerbs.Get)]
        [Authorize]
        public ViewResult EditCustomer(string id)
        {
            int customerId = Convert.ToInt32(id);
            CustomerRepository repository = new CustomerRepository();
            return View(repository.Load(customerId));
        }

当用户在文本框中更改后,我将保存更改后的客户,如下所示:

AcceptVerbs(HttpVerbs.Post)]
        [Authorize]
        public ActionResult EditCustomer(Customer customer)
        {         
            ValidateCustomer(customer);
            if (ModelState.IsValid)
            {
                CustomerRepository repository = new CustomerRepository();
                repository.Save(customer);
                return RedirectToAction("CreateCustomerDone");
            }
            else
            {
                return View();
            }
        }

到目前为止,没有任何奇特或意外,但在我的保存方法中:

public void Save(Customer customer)
        {
            if (customer.Id > 0)
                sdc.Refresh(System.Data.Linq.RefreshMode.KeepChanges, customer);
            else
                sdc.Customers.InsertOnSubmit(customer);

            sdc.SubmitChanges();
        }

...我在我的保存(更新)中得到一个异常,它无法刷新对象(无法识别为刷新指定的对象。)。在其他设置之前,我已经完成了这一百万次,它现在怎么会失败?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您发送给Save()的客户对象不属于DataContext。您需要再次获取对象,然后调用Refresh()

或者您可以执行以下操作:

public void Save(Customer customer)
{
    if (customer.Id > 0)
    {
        Customer orig = sdc.Customers.GetOriginalEntityState(customer);

       if(orig == null)
            sdc.Attach(customer);

        sdc.Refresh(System.Data.Linq.RefreshMode.KeepChanges, customer);
    }
    else
        sdc.Customers.InsertOnSubmit(customer);

    sdc.SubmitChanges();
}