如何在实体框架上下文中使用DI

时间:2018-11-21 06:12:15

标签: c# winforms entity-framework dependency-injection

我真的是依赖注入概念的新手。所以也许我弄错了,我不确定。让我描述一下这个问题。

我有一个Windows窗体应用程序。在主要形式中,我称实体框架数据库上下文

 DBContext context = new DBContext();

对于每个实体,我都有几种形式和业务逻辑。我想做的是:用户打开一个窗体,窗体中有一个datagridview来显示数据。它的数据源是上下文。

用户输入了一些数据,然后,如果用户单击“确定”按钮,我会呼叫context.saveChanges();

如果用户单击“取消”按钮,我不会打电话,并且我希望不会保存数据。

这是相关的代码。在主表单中,我调用表单并注入上下文:

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

在dataForm中,用户看到的是数据。我注入了从主体形式到逻辑类的相同上下文:

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;
}

这里的问题是,因为我使用依赖项注入(在主形式中为上下文->注入为数据形式->注入为逻辑),并且即使我不调用context.SaveChanges();,我也将上下文用作datagridview的数据源数据已保存到上下文。因此,用户单击“取消”,仍然看到修改后的数据。除非重新启动应用程序。

要解决此问题,我可以在逻辑类或数据形式中创建新的上下文实例,但是此解决方案将附带DI解决的问题。

那么,我应该如何实现我的代码?我是否使DI不正确?

0 个答案:

没有答案