EntityFramework .net 4 Обновить сущность простым методом - PullRequest
4 голосов
/ 28 августа 2009

Я смотрел на этот вопрос SO: ADO.net Entity Framework: Обновлять только определенные свойства на отдельном объекте . Это было большой помощью для меня. Теперь я знаю, что мне нужно присоединить объект, прежде чем вносить в него изменения. Но как я могу это сделать:

У меня есть веб-сайт MVC, страница обновления клиента с полями: идентификатор, имя, адрес и т. Д. Мой MVC анализирует это в сущности клиента. Как мне сделать следующее:

  • Обновите мою сущность и сохраните изменения в ней.
  • Поймать исключение, если мои изменения были сделаны после того, как я загрузил свою сущность.

1 Ответ

3 голосов
/ 28 августа 2009

Попробуйте что-то вроде этого (псевдокод, возможно, я неправильно запомнил некоторые имена методов):

public void Update(Customer entity)
{

   using (MyContext ctx = new MyContext())
   {
      // Create a stub entity and attach it
      Customer db = new Customer {ID = entity.ID};
      ctx.Customers.Attach(db); // ctx.AttachTo("Customers", db) in 3.5 sp1

      // ApplyPropertyChanges in 3.5 Sp1
      ctx.ApplyCurrentValues(entity); 
      ctx.SaveChanges();
   }
   ...
}

В этом коде используется трюк Stub Entity . Возможно, если у вас есть отношения, вам нужно рассказать EF больше об исходной сущности, ознакомьтесь с сообщением в блоге выше, чтобы узнать больше, потому что вы можете сделать это, используя заглушки.

В качестве альтернативы, если вас совсем не волнует параллелизм, вы можете просто сделать это:

public void Update(Customer entity)
{
   using (MyContext ctx = new MyContext())
   {
      // pull the entity from the database
      Customer db = ctx.Customers.First(c => c.ID == entity.ID);

      // ApplyPropertyChanges in 3.5 Sp1
      ctx.ApplyCurrentValues(entity); 
      ctx.SaveChanges();
   }
}

Надеюсь, это поможет

Алекс Джеймс

Советы по Entity Framework

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