C#,Winforms和LINQ to SQL.. Datacontext生命周期是什么?

5
我们使用自己编写的企业框架来促进我们所做的各种公司特定工作。在这个框架中,我们提供了适当时使用的LINQ to SQL ORM。所有这些都基于Microsoft MVC框架。在MVC方面,我们在基本控制器中创建一个数据上下文。这允许我们拥有完整的数据上下文生命周期,这对于事务非常有用。
我们想要完成的一个任务是提供Winforms支持。然而,我正在为寻找一种类似的Winforms解决方案而苦恼。
鉴于MVC方法相当直观,因为一个页面加载表示一个逻辑事务,很难在Winforms方面想出解决方案。
是否有人做过类似的事情或有任何建议?
4个回答

3
如果你在选择一个长寿的DataContext(例如作为应用程序中的Singleton)和短寿的DataContext之间犹豫,我会选择后者。我会为每个“工作单元”new()一个DataContext,并确保尽可能短地保持其活动状态。创建新的DataContext并不是一个大问题,因为它们无论如何都会缓存元数据。当开始跟踪太多对象时,拥有长期的DataContext会让你感到非常困扰。

“+1 单位工作”是关键词。桌面应用程序仍在执行不同的业务交易,可以分成独立的工作单元。这些单元应该控制数据上下文的生命周期。 - Hamish Smith

2

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

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

我建立了一个 IRenderer 接口,并实现了 RenderView() 方法,适用于 Web 和 Windows Forms。它允许我同时使用相同的控制器和模型。在 Google 上搜索 Model-View-ViewModel(MVVM)可能会找到一些关于这种方法的信息。

我认为这篇文章可以帮助你理解我的说法。


0

我知道这个帖子有点老了,但在 unhaddins 中,我们实现了 Conversation-per-BusinessTransaction。目前我们只有一个 nhibernate 的实现,但是为 Linq to sql 或 entity framework 实现它应该很简单。 请查看我的回答 list


0
只有一个数据上下文的问题在于,您无法进行多个打开的编辑并仅提交一个。对于许多应用程序模型来说,这是不可行的。因此,我为读取创建一个单例数据上下文,并为每个提交操作创建一个数据上下文。更新函数将要保存的对象从读取数据上下文中分离出来,并将它们附加到新的提交数据上下文中,然后运行DC.Submit changes。
唯一棘手的问题是如何跟踪对象是否应在提交时更新或插入,以及如果您具有标准自动编号主键或在某个集合中管理哪个列应作为插入与更新的检查类,则这相当容易克服。

因为保持长期的数据上下文以进行读取而被踩。这是收集过时数据的好方法。是的,您可以刷新,但是那样您就会失去保留数据所带来的任何性能提升。仅在需要获取或放置数据时使用上下文还简化了记录保存,并且不需要太担心对象是要插入还是要更新。(如果您有一个标识列,您可以检查其内容...如果没有写入,则没有任何内容。) - Cylon Cat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接