Заменить dbContext.SaveChanges() чем-то другим?C#

Место общения программистов C#
Ответить
Anonymous
 Заменить dbContext.SaveChanges() чем-то другим?

Сообщение Anonymous »

В моей компании мы используем Telerik OpenAccess. Дополнительное событие добавляется каждый раз при вызове dbContext.SaveChanges().
Начинающий программист использовал этот dbContext.SaveChanges() не менее чем 93 (!!!) раза, что вызвало многочисленные проблемы с моим приложением (соответствующее событие должно запускаться один или два раза, а не 93 раза).
Я уже пробовал удалить dbContext. SaveChanges(), но поскольку изменения в базе данных действительно необходимы, это приводит к серьезному сбою в программе.
Поэтому возникает, возможно, странный вопрос: есть ли еще один фрагмент код, чем dbContext.SaveChanges(), который сохраняет изменения в базе данных, на которые ссылается dbContext?
Если такой вещи не существует, я также мог бы согласиться к такому решению, как:

Код: Выделить всё

var events = dbContext.getEvents();
dbContext.RemoveEvents();
dbContext.SaveChanges();
dbContext.AddEvents(events);
Для вашей информации, dbContext определяется как:

Код: Выделить всё

private readonly IUnityContainer _unityContainer;
using (var dbContext = _unityContainer.Resolve())
{
... // all DB-related actions happen inside such a using-clause.
}
UnityContainer определен в Microsoft.Practices.Unity и имеет следующий заголовок:

Код: Выделить всё

//
// Summary:
//     Interface defining the behaviour of
//     the Unity dependency injection container.
public interface IUnityContainer : IDisposable
Если вы можете сказать, что есть способ получить другой dbContext (не запуская упомянутые события), это было бы здорово, что-то вроде:

Код: Выделить всё

using (var anotherDbContext =
_unityContainer.Resolve_another())
{
... // I can also make DB modifications, but without those events.
}
Предложение по решению: как насчет CreateDetachedCopy?
Я только что нашел метод Telerik OpenAccess CreateDetachedCopy (), и я предполагаю, что это работает следующим образом:

Код: Выделить всё

var obj = dbContext.CreateDetachedCopy(o => o.id==known_id);
obj.ChangeSomething();
dbContext.SaveChanges(); // the modifications in obj are
// not taking into account.
Теперь возникает вопрос: как я могу быть уверен, что в более подходящий момент изменения будут учтены?

Код: Выделить всё

var obj2 = dbContext.GetData(o => o.id == obj.id).FirstOrDefault();
obj2.CloneInformationFromObject(obj);
// just a clear name, I have no idea how to do this.
dbContext.SaveChanges();
Как выполнить часть CloneInformationFromObject()? Охвачено ли это библиотекой Telerik OpenAccess?
Осторожно:

Мой dbContext — это всего лишь интерфейс к Telerik OpenAccess dbContext, и этот интерфейс не содержит метода AttachCopy(), поэтому я не могу его использовать.

Подробнее здесь: https://stackoverflow.com/questions/785 ... thing-else
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»