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

时间:2009-07-27 16:29:37

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

如果我将OnCreated扩展为LINQ to SQL表对象,是否可以获取对该表所属的数据上下文的引用?例如,如果我向数据上下文添加属性:

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

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

Partial Class MyTable

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

End Class

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

3 个答案:

答案 0 :(得分:1)

在LINQ to SQL中没有生成的 table 对象 - 只有行对象,其中DataContext每个拥有一个Table(Of TRowType)。因此,您实现的部分OnCreated方法位于行类中,并且只要创建了行就会调用它。

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

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

答案 1 :(得分:1)

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

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

例如

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

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

答案 2 :(得分:0)

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

Determine the source DataContext for a Linq to Sql query