【问题标题】:LINQ to SQL: Is it possible to reference the data context when extending a table object?LINQ to SQL:扩展表对象时是否可以引用数据上下文?
【发布时间】:2009-07-28 01:02:32
【问题描述】:

如果我为 LINQ to SQL 表对象扩展 OnCreated,是否可以获得对表所属数据上下文的引用?例如,如果我在数据上下文中添加一个属性:

Partial Class MyDataContext

    Private _myValue As String
    Public ReadOnly Property MyValue As String
       Get
           Return _myValue
       End Get
       Set(ByVal value As String)
           _myValue = value
       End Set
    End Property

End Class

有没有办法在表的创建事件中访问该值,即:

Partial Class MyTable

    Private Sub OnCreated()
        Dim contextValue = [data_context_reference_here].MyValue
    End Sub

End Class

我不希望共享数据上下文中的属性,因为每个实例可能不同。我一直在倾注设计器代码以找出参考可能在哪里,但还没有运气。有什么想法吗?

【问题讨论】:

  • 什么原因让您认为您需要访问该属性?也许没有必要这样做......请提供更多信息
  • 用于调试。我想将调试类的一个实例传递给上下文,然后能够从该上下文中任何表上的任何事件访问它。 (所以“MyValue”将是调试器实例 - 为了简单起见,我只是将其设为字符串。)

标签: vb.net linq linq-to-sql


【解决方案1】:

在 LINQ to SQL 中没有生成的 对象——只有行对象,其中 DataContext 拥有一个 Table(Of TRowType) per。所以你实现的部分OnCreated 方法在一个行类中,每当创建行时都会被调用。

生成的行对象实现INotifyPropertyChangedINotifyPropertyChanging,但不是从任何基类派生的。由于OnCreated 不接受任何参数,因此该行无法(通过该方法)确定它属于哪个表,更不用说它是为哪个 DataContext 创建的。

你必须找到其他方法来做你想做的事。

【讨论】:

    【解决方案2】:

    我会说这是 Linq 2 SQL 的错误模式

    在 Linq2sql 中,假设任何行对象(如 MyTable)都可以在没有上下文的情况下创建。稍后您可以将其附加到表格(具有指定的上下文)

    例如

    Dim myTable as new MyTable()
    dataContext.GetTable(Of MyTable).Attach(myTable)
    

    所以实际上,您不应该在 MyTable 类中创建任何依赖于用于创建此对象的数据上下文的逻辑,因为其中一些可以在没有数据上下文的情况下创建,有些可以附加和分离...

    【讨论】:

      【解决方案3】:

      一个简单的谷歌搜索(linq 事件数据上下文)会引导你到这个问题已经被问和回答的地方:

      Determine the source DataContext for a Linq to Sql query

      【讨论】:

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