ApplyCurrentValues, похоже, не работает - PullRequest
0 голосов
/ 08 декабря 2010

Я пытаюсь сделать следующее с помощью Entity Framework 4:

public void Update(Site entity)
{
    using (db)
    {
        db.Sites.Attach(db.Sites.Single(s => s.Id == entity.Id));
        db.Sites.ApplyCurrentValues(entity);
        db.SaveChanges();
    }
}

Но когда я пытаюсь обновить сайт с помощью этого метода, я получаю сообщение об ошибке:

Преобразование данных datetime2 тип к типу данных datetime в результате в значении вне диапазона. заявление было прекращено.

И это потому, что оригинальный сайт по какой-то причине не загружается с помощью метода Attach ().

Может кто-нибудь помочь с этим?

/ Martin

Ответы [ 2 ]

3 голосов
/ 08 декабря 2010

Вам не нужно «прикреплять» то, что вы уже извлекаете (Ладислав прав). Как только вы извлекаете объект (например, SingleOrDefault), он находится «в графе» (память EF, поэтому он может выполнять оптимистичный параллелизм).

Если вы пытаетесь выполнить ОБНОВЛЕНИЕ <и «сущность», через которую вы проходите, новая / отдельная ... </p>

Попробуйте метод заглушки :

public void Update(Site entity)
{
    using (db)
    {
        var stub = new Site { Id = entity.Id }; // create stub with given key
        db.Sites.Attach(stub); // stub is now in graph
        db.Sites.ApplyCurrentValues(entity); // override graph (stub) with entity
        db.SaveChanges();
    }
}

При этом указанная вами ошибка указывает на другую проблему (преобразование данных).

Вы проверили значения «даты», через которые вы проходите, с типом данных в модели?

0 голосов
/ 28 апреля 2011
public ActionResult Edit(int id, Client collection)
{
   try
   {
      // make sure the rec is in the context
      var rec = dbEntities.Clients.First(r => r.ClientID == id);  
      // update the rec in the context with the parm values
      dbEntities.Clients.ApplyCurrentValues(collection);          
      // make the changes permanent
      dbEntities.SaveChanges();                                   
      return RedirectToAction("Index");
    }
    catch
    {
      return View();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...