代码之家  ›  专栏  ›  技术社区  ›  gfrizzle

linq to sql:扩展表对象时是否可以引用数据上下文?

  •  1
  • gfrizzle  · 技术社区  · 17 年前

    如果我为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
    

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

    3 回复  |  直到 17 年前
        1
  •  1
  •   Ben M    17 年前

    没有生成 桌子 linq to sql中的对象--仅行对象,其中DataContext拥有一个 Table(Of TRowType) 每。所以部分 OnCreated 您实现的方法位于Row类中,并且每当创建一行时都将调用该方法。

    生成的行对象实现 INotifyPropertyChanged INotifyPropertyChanging ,但不是从任何基类派生的。自从 被创造的 不接受任何参数,该行无法(通过该方法)确定它属于哪个表,更不用说它是为哪个数据上下文创建的。

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

        2
  •  1
  •   Bogdan_Ch    17 年前

    我会说这是一个不正确的Linq2 SQL模式

    在linq2sql中,应该可以在没有上下文的情况下创建任何行对象,比如myTable。稍后,您可以将其附加到表(具有指定的上下文)

    例如

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

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

        3
  •  0
  •   Community Mohan Dere    9 年前

    一个简单的Google搜索(Linq事件数据上下文)会引导您找到这个问题的答案:

    Determine the source DataContext for a Linq to Sql query