Entity Framework: Tracking changes to independent associations?

Instead of looking at entity keys one should extract association ends from object state entry. I saw a hint in Daniel Simmons' blog blogs.msdn.com/b/dsimmons/archive/2008/0... Here are some extension methods that I came up with (UsableValues is also from Daniel's blog): public static AssociationEndMember GetAssociationEnds( this ObjectStateEntry entry) { var fieldMetadata = entry.UsableValues().DataRecordInfo. FieldMetadata; return fieldMetadata.

Select( m => m. FieldType as AssociationEndMember).ToArray(); } public static AssociationEndMember GetOtherAssociationEnd( this ObjectStateEntry entry, AssociationEndMember end) { end. ValidateBelongsTo(entry); AssociationEndMember ends = entry.

GetAssociationEnds(); if (ends0 == end) { return ends1; } return ends0; } public static EntityKey GetEndEntityKey( this ObjectStateEntry entry, AssociationEndMember end) { end. ValidateBelongsTo(entry); AssociationEndMember ends = entry. GetAssociationEnds(); if (ends0 == end) { return entry.UsableValues()0 as EntityKey; } return entry.UsableValues()1 as EntityKey; } public static NavigationProperty GetNavigationProperty( this ObjectStateEntry entry, AssociationEndMember end) { end.

ValidateBelongsTo(entry); var otherEnd = entry. GetOtherAssociationEnd(end); var relationshipType = entry.EntitySet. ElementType; var key = entry.

GetEndEntityKey(end); var entitySet = key. GetEntitySet( entry. ObjectStateManager.

MetadataWorkspace); var property = entitySet.ElementType. NavigationProperties. Where( p => p.

RelationshipType == relationshipType && p. FromEndMember == end && p. ToEndMember == otherEnd) .SingleOrDefault(); return property; } ValidateBelongsTo extension method (UsableValue is another extension method from Daniel's blog): static void ValidateBelongsTo( this AssociationEndMember end, ObjectStateEntry entry) { if (!entry.

IsRelationship) { throw new ArgumentException("is not a relationship entry", "entry"); } var fieldMetadata = entry.UsableValues().DataRecordInfo. FieldMetadata; if (fieldMetadata0. FieldType as AssociationEndMember!

= end && fieldMetadata1. FieldType as AssociationEndMember! = end) { throw new InvalidOperationException(string.

Format( "association end {0} does not participate in the " + "relationship {1}", end, entry)); } }.

Instead of looking at entity keys one should extract association ends from object state entry. I saw a hint in Daniel Simmons' blog blogs.msdn.com/b/dsimmons/archive/2008/0.... Here are some extension methods that I came up with (UsableValues is also from Daniel's blog): public static AssociationEndMember GetAssociationEnds( this ObjectStateEntry entry) { var fieldMetadata = entry.UsableValues().DataRecordInfo.

FieldMetadata; return fieldMetadata. Select( m => m. FieldType as AssociationEndMember).ToArray(); } public static AssociationEndMember GetOtherAssociationEnd( this ObjectStateEntry entry, AssociationEndMember end) { end.

ValidateBelongsTo(entry); AssociationEndMember ends = entry. GetAssociationEnds(); if (ends0 == end) { return ends1; } return ends0; } public static EntityKey GetEndEntityKey( this ObjectStateEntry entry, AssociationEndMember end) { end. ValidateBelongsTo(entry); AssociationEndMember ends = entry.

GetAssociationEnds(); if (ends0 == end) { return entry.UsableValues()0 as EntityKey; } return entry.UsableValues()1 as EntityKey; } public static NavigationProperty GetNavigationProperty( this ObjectStateEntry entry, AssociationEndMember end) { end. ValidateBelongsTo(entry); var otherEnd = entry. GetOtherAssociationEnd(end); var relationshipType = entry.EntitySet.

ElementType; var key = entry. GetEndEntityKey(end); var entitySet = key. GetEntitySet( entry.

ObjectStateManager. MetadataWorkspace); var property = entitySet.ElementType. NavigationProperties.

Where( p => p. RelationshipType == relationshipType && p. FromEndMember == end && p.

ToEndMember == otherEnd) .SingleOrDefault(); return property; } ValidateBelongsTo extension method (UsableValue is another extension method from Daniel's blog): static void ValidateBelongsTo( this AssociationEndMember end, ObjectStateEntry entry) { if (!entry. IsRelationship) { throw new ArgumentException("is not a relationship entry", "entry"); } var fieldMetadata = entry.UsableValues().DataRecordInfo. FieldMetadata; if (fieldMetadata0.

FieldType as AssociationEndMember! = end && fieldMetadata1. FieldType as AssociationEndMember!

= end) { throw new InvalidOperationException(string. Format( "association end {0} does not participate in the " + "relationship {1}", end, entry)); } }.

I can't seem to find the ValidateBelongsTo method. Could you please help. – SolarX Sep 20 at 9:13 1 I updated the post with ValidateBelongsTo.

Its a sanity check, doesn't do any work though. – see me no more Sep 20 at 19:21.

Added | EntityState. Where(e => e. Var key0 = entry.

Looks like my code is the right solution to this problem.

Instead of doing all these, I will simply Override SaveChanges and enumerate all changes and save those changes in database with following order..

I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.

Related Questions