Реальное обновление объекта Entity Framework - без дублирования - PullRequest
1 голос
/ 25 марта 2011

Я пытаюсь обновить объект в моей базе данных, используя Entity Framework 4.1 с Code-First и SQL Server 2008. Класс моего объекта имеет поле ID типа int.Проблема в том, что когда я обновляю свой объект и вызываю SaveChanges в моем DbContext, чтобы база данных создала копию базы данных, а не обновила ту, которая у меня уже есть.Я не хочу этого, я просто хотел бы чистого обновления, как в старомодной команде SQL UPDATE.Как я могу это исправить?

 Nation nation = (nationDB.Nations.Where(m => m.name == "France")).SingleOrDefault();

 if (nation != null)
 {
   Nation modNation = nationDB.Nations.Find(nation.ID);
   modNation.Level++;
 }

 nationDB.SaveChanges();

public class Nation
{
    public int ID { get; set; }
    public int name { get; set; }
    public int level { get; set; }
}

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

Чтобы обновить его, вы должны сначала прочитать его из базы данных, изменить его, а затем сохранить.

Если вы создаете новую сущность в коде, даже с существующим ключом, EF будет рассматривать его как новую сущность.

1 голос
/ 25 марта 2011

Я думаю, что ObjectStateManager зарегистрировал ваш объект как находящийся в состоянии Added. Попробуйте установить его состояние на Modified (вызывая GetObjectStateEntry(Object) и проверяя / изменяя свойство State).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...