SaveChanges не работает, когда контекст добавляется в другой файл класса в C#, EntityFramework

Я вызываю функцию из моего контроллера.

biz.AddActivityLog(Param1, Param2);

Эта функция находится внутри другого файла класса.

Внутри этой функции я создаю новый объект с помощью параметров, полученных от функции.

Затем я добавляю свой вновь созданный объект в контекст.

context.MyObject.Add(Obj);

Но я не использую context.SaveChanges();here.

Я выполняю SaveChanges только внутри моего контроллера.

Но объект, который я добавил в контекст внутри функции, не сохраняется.

Когда я попробовал тот же код без использования функции - (создал мой новый объект внутри самого моего контроллера), он был сохранен. Почему я не могу просто добавить его в контекст другого класса и выполнить сохранение изменений с моего контроллера?

Пожалуйста помоги.


person Shafeek    schedule 11.11.2016    source источник
comment
Вы передаете объект контекста из класса в контроллер? Еще немного кода было бы очень полезно   -  person chrsi    schedule 11.11.2016


Ответы (1)


Если вы добавляете объект в контекст, его изменения отслеживаются объектом контекста. Если вы никогда не выполняете метод SaveChanges, эти изменения теряются в точке, где уничтожается объект контекста.

При создании нового контекста в контроллере создается новый экземпляр без каких-либо измененных данных. (Он не реализован как синглтон)

Вы должны либо передать контекст контроллеру, либо сохранить контекст внутри класса, в котором вы его меняете. Но передача контекста контроллеру — это действительно плохая практика, поскольку она нарушает принцип единой ответственности (SRP), поскольку смешивает код mvc с кодом ef. Если позже вы решите переключиться на другую структуру персистентности, вам придется изменить каждый контроллер, который использовал ваш класс.

person chrsi    schedule 11.11.2016