Обновление объекта Linq2Sql дает исключение в MVC - PullRequest
4 голосов
/ 03 октября 2010

net MVC Web Application.У меня есть база данных, где я сделал свою модель, я использую Linq2SQL для построения моего уровня бизнес-логики.В моем приложении у меня есть объект customer, когда я вызываю свою страницу "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 Ответ

2 голосов
/ 03 октября 2010

Объект клиента, который вы отправляете на 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...