【问题标题】:C#, Winforms & LINQ to SQL.. Datacontext lifecycle?C#、Winforms 和 LINQ to SQL.. 数据上下文生命周期?
【发布时间】:2009-01-19 20:28:00
【问题描述】:

我们使用我们编写的企业框架来促进我们所做的各种公司特定工作。

在框架内,我们提供了一个 LINQ to SQL ORM,以便在适当的时候使用。所有这些都基于 Microsoft MVC 框架。在 MVC 方面,我们在基本控制器中新建了一个数据上下文。这为我们提供了完整的数据上下文生命周期,这对于事务非常有用。

我们希望完成的一项任务是提供 Winforms 支持。

但是,我正想方设法找出一种方法,以类似的方式适用于 Winforms。

鉴于 MVC 方法非常简单,因为一个页面加载代表一个逻辑事务,因此很难在 Winforms 方面提出解决方案。

有没有人做过类似的事情或者有什么建议?

【问题讨论】:

    标签: c# asp.net-mvc winforms linq transactions


    【解决方案1】:

    如果您正在考虑在拥有长期 DataContext(例如作为应用程序中的 Singleton)或拥有短期 DataContext 之间进行选择,我会选择第二个。我会为每个“工作单元”新建()一个 DataContext,并确保它尽可能短地保持活动状态。创建一个新的 DataContext 不是一个大问题,因为它们无论如何都会缓存元数据。当 DataContext 开始跟踪许多对象时,拥有一个长期存在的 DataContext 会给您带来一些噩梦。

    【讨论】:

    • +1 工作单位是这里的关键词。桌面应用程序仍在执行不同的业务事务,这些事务可以而且应该划分为单独的工作单元。这些应该控制数据上下文的生命周期
    【解决方案2】:

    我为我们去年构建的一些小软件做了类似的事情。

    我们创建了一个加载表单的应用程序外壳,类似于请求/响应模型。

    我使用RenderView() 方法构建了一个IRenderer 接口,我已经为Web 和Windows 窗体实现了该方法。它允许我对两者使用相同的控制器和模型。在 goodle 上搜索 Model-View-ViewModel (MVVM),你可能会发现一些关于这种方法的信息。

    我认为this article 可以帮助你理解我在说什么。

    【讨论】:

    • 非常感谢您提供的信息!
    【解决方案3】:

    所有内容都只有一个数据上下文的问题在于,您不能有多个打开的编辑并且只能提交一个。对于许多应用程序模型来说,这是一个非首发。因此,我有一个用于读取的单例数据上下文,并为每个提交操作创建一个。更新函数将要保存的对象从读取的数据上下文中分离出来,并将它们附加到新的提交数据上下文中,然后运行 ​​DC.Submit 更改。

    唯一棘手的事情是有一种方法来跟踪对象是否应该在提交时更新或在提交时插入,以及如果您有一个标准的自动 num 主键或在某个集合中管理某个列应该作为检查插入和更新哪个类,这很容易克服。

    【讨论】:

    • 因保持长期数据上下文可供读取而被否决。这是收集陈旧数据的好方法。是的,您可以刷新,但是您会失去保存数据带来的任何性能提升。仅在需要获取或放置数据时使用上下文也可以简化记录保存,并且不必担心是否要插入或更新对象。 (如果你有一个身份列,你可以检查它的内容,无论如何......如果它没有被写入,那么那里什么都没有。)
    【解决方案4】:

    我知道这个线程有点老了,但在 unhaddins 中,我们有一个 Conversation-per-BusinessTransaction 的实现。目前我们只有一个 nhibernate 的实现,但是为 Linq to sql 或实体框架实现它应该很简单。 在list 中查看我的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2010-12-03
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多