Как использовать DI с контекстом Entity Framework - PullRequest
0 голосов
/ 21 ноября 2018

Я действительно новичок в концепции внедрения зависимостей.Так что, возможно, я сделал это неправильно, я не уверен.Позвольте мне описать проблему.

У меня есть приложение Windows Forms.В основной форме я назвал Entity Framework db context

 DBContext context = new DBContext();

У меня есть несколько форм и бизнес-логика для каждой сущности.Я пытаюсь сделать следующее: пользователь открывает форму, в ней есть сетка данных для отображения данных.Его источником данных является контекст.

Пользователь вводит некоторые данные, затем, если пользователь нажимает кнопку «ОК», я вызываю context.saveChanges();

Если пользователь нажимает кнопку «Отмена», я не вызываю и ожидаю данныхне сохраняется.

Вот соответствующий код.В mainform я вызываю мою форму и вставляю контекст:

dataForm form = new dataForm(context);
form.ShowDialog();

В dataForm пользователь видит данные, грубые.Я внедряю тот же контекст, который идет от mainform к логическому классу:

DBContext context;
dataLogic logic;

public dataForm(DBContext context)
{
     this.context = context;
     logic = new dataLogic(context);
} 

private void okButton_Click(object sender, EventArgs e)
{
    context.SaveChanges();
    DialogResult = DialogResult.OK;
}

private void cancelButton_Click(object sender, EventArgs e)
{
    DialogResult = DialogResult.Cancel;
}

Проблема здесь в том, что я использую внедрение зависимостей (контекст в mainform -> inject to dataform -> inject to logic) и Iиспользуйте контекст в качестве источника данных для просмотра данных, даже если я не вызываю context.SaveChanges();, данные были сохранены в контекст.Таким образом, пользователь нажимает кнопку отмены и по-прежнему видит измененные данные.Если это не перезапустить приложение.

Чтобы устранить проблему, я могу создать новые экземпляры контекста в логических классах или формах данных, но это решение будет сопровождаться проблемами, которые решает DI.

Итак, как следуетЯ реализую свой код?Я сделал DI не правильно?

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