3

我有一个 Windows 窗体应用程序,其形式如下:

  • 主窗体
  • 第一形式
  • 第二种形式
  • ...

主窗体从头开始,在应用程序存在后结束。当我每个表单使用一个上下文时,主表单的生命周期是否不长?每个表单都有一个上下文,我遇到的第二个问题是我总是必须使用分离的实体。

编辑: 我总是需要重新附加以下实体:

_context.MyEntities.Attach(existingEntity1);
_context.MyEntities2.Attach(existingEntity2);

existingEntity1.MyEntities2.Add(existingEntity2);

_context.SaveChanges();

这对我来说有点奇怪。

生命周期处理的最佳实践是什么?当我为每个表单使用一个上下文时,如何解决分离问题?

现在我的数据绑定看起来像:

var myEntities = from e in _context.MyEntities
                 select e;

var bindingList = new BindingList<MyEntity>(myEntities.ToList());
myGridView.DataSource = bindingList;

假设 MainForm、FirstForm 和 SecondForm 需要相同的绑定列表,但做不同的事情,共享绑定列表的最佳实践是什么?

4

2 回答 2

1

建议是每个表单的上下文。但是,如果在多个表单中使用相同的上下文对您有好处——如果在相同的实体上工作更快的开发和/或更好的性能——并且这超过了长期存在的风险上下文 - 加载的实体过多和并发问题 - 然后在多个表单中使用上下文。也许您的父表单中还有另一个事件可用于触发上下文的处置和重新创建,以在它成为问题时缩短它的生命周期?

另一种选择是评估您的表单是否可以更改以表示更多离散的工作单元,您可能不必对如此多的通用实体进行操作,从而减少分离的实体。

于 2013-01-07T10:23:55.230 回答
0

编辑:如评论中所述,此答案不是微软当前的建议。它可能适用于复杂的对象模型和模型与上下文分离的情况。

对于您的第一个问题,我会说上下文太长了。寿命短通常更好。

对于您的第二个问题,如果您经常处理分离的实体,我会研究自我跟踪实体。

对于您的第三个问题,这取决于您对数据的处理方式。如果它是只读的,那么您可以将相同的数据绑定到同一个实例而不会出现太多问题。如果是为了进行更新,那么它取决于业务领域。在某些情况下,您可能会考虑“克隆”数据以保持数据分离。但是,每个表单都看到相同的单个实例,这样所有表单都显示相同版本的数据,这也可能是有意义的。一个表格上的更改会显示在其他表格上。在任何一种情况下,自我跟踪实体都可以很好地工作。

我有一个示例显示在 WPF 应用程序中使用自我跟踪实体

于 2013-01-06T13:18:31.403 回答