private IEntityDifference <T, TRelation> GetDifference <T, TRelation>(ICollectionRelationConfig <T, TRelation> relation, IDictionary <object, TRelation> persistedMapped, IList <TRelation> persistedUnmapped, IDictionary <object, TRelation> updatedMapped, IList <TRelation> updatedUnmapped) { var difference = new EntityDifference <T, TRelation>(); foreach (var key in updatedMapped.Keys) { var persisted = default(TRelation); persistedMapped.TryGetValue(key, out persisted); var updated = default(TRelation); updatedMapped.TryGetValue(key, out updated); difference.Updated.Add(new EntityDifference <TRelation>(persisted, updated)); } { foreach (var updated in updatedUnmapped) { difference.Added.Add(new EntityDifference <TRelation>(default(TRelation), updated)); } } foreach (var key in persistedMapped.Keys) { var persisted = default(TRelation); persistedMapped.TryGetValue(key, out persisted); if (updatedMapped.ContainsKey(key)) { continue; } difference.Deleted.Add(new EntityDifference <TRelation>(persisted, default(TRelation))); } return(difference); }
public IEntityDifference <T, TRelation> GetDifference <T, TRelation>(ICollectionRelationConfig <T, TRelation> relation, T persisted, T updated) { var persistedMapped = default(IDictionary <object, TRelation>); var persistedUnmapped = default(IList <TRelation>); var updatedMapped = default(IDictionary <object, TRelation>); var updatedUnmapped = default(IList <TRelation>); this.GetChildren(relation, persisted, out persistedMapped, out persistedUnmapped); this.GetChildren(relation, updated, out updatedMapped, out updatedUnmapped); return(this.GetDifference <T, TRelation>(relation, persistedMapped, persistedUnmapped, updatedMapped, updatedUnmapped)); }
protected virtual void GetChildren <T, TRelation>(ICollectionRelationConfig <T, TRelation> relation, T item, out IDictionary <object, TRelation> mapped, out IList <TRelation> unmapped) { mapped = new Dictionary <object, TRelation>(); unmapped = new List <TRelation>(); if (item != null) { var children = relation.Accessor.Get(item); foreach (var child in children) { var key = default(object); if (EntityKey.HasKey(relation.RightTable, child, out key)) { mapped.Add(key, child); } else { unmapped.Add(child); } } } }
protected virtual void Initialize <TEntity, TRelation>(TEntity item, ICollectionRelationConfig <TEntity, TRelation> relation) { relation.Accessor.Set(item, Factories.Collection.Create <TRelation>(relation.Accessor.Property.PropertyType)); }
public CollectionEntityRelationGraphNode(IEntityGraphNode parent, ICollectionRelationConfig <T, TRelation> relation) : base(parent, relation.RightTable, relation) { }
protected virtual EntityGraphNode <TRelation> CreateNode <T, TRelation>(IEntityGraphNode <T> parent, ICollectionRelationConfig <T, TRelation> relation) where T : class where TRelation : class { return(new CollectionEntityRelationGraphNode <T, TRelation>(parent, relation)); }