Как обновить объект без контекста данных
-
03-07-2019 - |
Вопрос
Entity Framework обеспечивает большую гибкость для обновления данных в одном и том же контексте данных.
Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()
Если мне придется переместить эту функцию обновления на уровень обслуживания, который принимает в запросе только «Человека», как лучше всего назначить мой объект запроса «Лицо» в контекст данных без повторного глубокого копирования?
Решение
Вам необходимо прикрепить объект сущности к контексту данных.
Вам также необходимо расширить частичный класс контекста данных с помощью метода AttachUpdeted.Когда вы прикрепляете объект к контексту данных, он не знает, что были сделаны обновления.Код ниже сообщит контексту данных, что каждое свойство было обновлено и его необходимо записать в базу данных.
public static void Save(EntityObject entity)
{
using(MyContext ctx = new MyContext)
{
ctx.AttachUpdated(entity);
ctx.SaveChanges();
}
}
public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached)
{
if (objectDetached.EntityState == EntityState.Detached)
{
object original = null;
if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
else
throw new ObjectNotFoundException();
}
}
Не связан с StackOverflow