.net 我是否应该定义一个“单独的”;“数据上下文”;并在周围传递对它的引用或定义muliple“;“数据上下文”;我到底在哪里需要它们?

.net 我是否应该定义一个“单独的”;“数据上下文”;并在周围传递对它的引用或定义muliple“;“数据上下文”;我到底在哪里需要它们?,.net,wcf,silverlight,wcf-data-services,.net,Wcf,Silverlight,Wcf Data Services,我有一个Silverlight应用程序,它由一个主窗口和几个在主窗口上更新和绘制图像的类组成。我现在扩展它来跟踪数据库中的所有内容 不谈细节,假设我有这样一个结构: MainWindow Drawing-Surface Class1 -- Supports Drawing DataContext + DataServiceCollection<T> w/events Class2 -- Manages "transactions" (add/delet

我有一个Silverlight应用程序,它由一个主窗口和几个在主窗口上更新和绘制图像的类组成。我现在扩展它来跟踪数据库中的所有内容

不谈细节,假设我有这样一个结构:

MainWindow
  Drawing-Surface
    Class1 -- Supports Drawing
      DataContext + DataServiceCollection<T> w/events
    Class2 -- Manages "transactions" (add/delete objects from drawing)
    Class3
main窗口
图纸表面
类别1——支架图纸
DataContext+DataServiceCollection w/events
Class2--管理“事务”(从图形中添加/删除对象)
类别3
每个“类”都被传递一个对绘图表面的引用,以便它们可以独立地与它交互

我开始在Class1中使用WCF数据服务,它运行良好;但是,其他类也需要访问WCF数据服务。(我是否应该在主窗口中定义“DataContext”并向每个子类传递引用?)

Class1需要对“事务”数据进行读取访问,Class2需要对某些图形数据进行读取访问。所以我的问题是,在哪里定义我的DataContext最有意义

这样做有意义吗

  • 定义一个“全局”WCF数据服务“上下文”对象,并在所有后续类中传递对该对象的引用
  • 为每个类1、类2等定义一个“上下文”实例
  • 是否让每个需要访问数据的方法定义自己的“上下文”实例,并使用闭包处理异步加载/完成事件
  • 这样的结构更有意义吗?长时间打开活动的“DataContext”是否有任何危险?此应用程序的典型用例范围为1分钟到40分钟以上

    MainWindow
      Drawing-Surface
      DataContext
        Class1 -- Supports Drawing
          DataServiceCollection<DrawingType> w/events
        Class2 -- Manages "transactions" (add/delete objects from drawing)
          DataServiceCollection<TransactionType> w/events
        Class3
          DataServiceCollection<T> w/events
    
    main窗口
    图纸表面
    数据上下文
    类别1——支架图纸
    带事件的DataServiceCollection
    Class2--管理“事务”(从图形中添加/删除对象)
    带事件的DataServiceCollection
    类别3
    带事件的DataServiceCollection
    
    一般来说,您不应该将上下文保留太长时间。上下文包含对您从中获得的所有实体的引用(除非您关闭更改跟踪),因此,如果您保留它,那么您也将保留内存中的所有实体。 如果您的访问是只读的,那么我只会考虑实体的生命周期(以及与它相关的内存消耗)。 如果您的访问是读写的,那么如果您有两个上下文,并且从其中一个对某个实体进行了更改,那么另一个将看不到它。因此,在这种情况下,您可能需要一个单独的上下文。但寿命问题仍然适用


    因此,如果你知道你不会使用很多不同的实体,为了简单起见,我只会使用一个上下文(它允许你共享实例)。如果您知道要使用很多实体,那么我会考虑偶尔删除上下文(在应用程序的某个逻辑位置)。

    如果我要执行大量读取、大量更新和新记录,该怎么办?每节课大约100秒。你能把它归类为“很多实体”吗?100不是那么大的数字。但是,如果您已经有了会话的概念,我强烈建议您为每个会话创建一个新的上下文,并在完成会话后将其删除。