Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Yes - using reflection is about the only way to determine the DataContext to which the query belongs. It's the same with the Data Objects that are created when the query is triggered.</p> <p>What follows doesn't strictly answer Rune's question, but may be helpful if you want to use reflection to determine whether a Data Object as attached to and monitored by a Data Context:</p> <p>The following code defines a Context property which can be placed onto a data object, and then used to return the DataContext (if any) that the object is attached to.</p> <pre><code>Private Const StandardChangeTrackerName As String = "System.Data.Linq.ChangeTracker+StandardChangeTracker" Private _context As DataClasses1DataContext Public Property Context() As DataClasses1DataContext Get Dim hasContext As Boolean = False Dim myType As Type = Me.GetType() Dim propertyChangingField As FieldInfo = myType.GetField("PropertyChangingEvent", BindingFlags.NonPublic Or BindingFlags.Instance) Dim propertyChangingDelegate As PropertyChangingEventHandler = propertyChangingField.GetValue(Me) Dim delegateType As Type = Nothing For Each thisDelegate In propertyChangingDelegate.GetInvocationList() delegateType = thisDelegate.Target.GetType() If delegateType.FullName.Equals(StandardChangeTrackerName) Then propertyChangingDelegate = thisDelegate hasContext = True Exit For End If Next If hasContext Then Dim targetField = propertyChangingDelegate.Target Dim servicesField As FieldInfo = targetField.GetType().GetField("services", BindingFlags.NonPublic Or BindingFlags.Instance) If servicesField IsNot Nothing Then Dim servicesObject = servicesField.GetValue(targetField) Dim contextField As FieldInfo = servicesObject.GetType.GetField("context", BindingFlags.NonPublic Or BindingFlags.Instance) _context = contextField.GetValue(servicesObject) End If End If Return _context End Get Set(ByVal value As DataClasses1DataContext) _context = value End Set End Property </code></pre> <p>Take care to note that the object can only locate it's DataContext if it is currently attached to the context with ChangeTracking switched on. This property relies on the fact that the DataContext has subscribed to the object's OnPropertyChanging event to monitor changes over the lifespan of the object.</p> <p>If this was helpful, please up-vote this post.</p> <p>For more info on using reflection to find event handlers: <a href="http://weblogs.asp.net/avnerk/archive/2007/03/29/reflecting-over-an-event.aspx" rel="nofollow noreferrer">http://weblogs.asp.net/avnerk/archive/2007/03/29/reflecting-over-an-event.aspx</a> <a href="http://www.bobpowell.net/eventsubscribers.htm" rel="nofollow noreferrer">http://www.bobpowell.net/eventsubscribers.htm</a></p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload