如果我将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
我不希望数据上下文中的属性被共享,因为每个实例可能不同。我一直在倾注设计师代码以找出引用的位置,但还没有运气。有什么想法吗?
答案 0 :(得分:1)
在LINQ to SQL中没有生成的 table 对象 - 只有行对象,其中DataContext每个拥有一个Table(Of TRowType)
。因此,您实现的部分OnCreated
方法位于行类中,并且只要创建了行就会调用它。
生成的行对象实现INotifyPropertyChanged
和INotifyPropertyChanging
,但不是从任何基类派生的。由于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事件数据上下文)会引导您到这个问题已经被问及并回答: