Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
 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);
             }
         }
     }
 }
Beispiel #4
0
 protected virtual void Initialize <TEntity, TRelation>(TEntity item, ICollectionRelationConfig <TEntity, TRelation> relation)
 {
     relation.Accessor.Set(item, Factories.Collection.Create <TRelation>(relation.Accessor.Property.PropertyType));
 }
Beispiel #5
0
 public CollectionEntityRelationGraphNode(IEntityGraphNode parent, ICollectionRelationConfig <T, TRelation> relation) : base(parent, relation.RightTable, relation)
 {
 }
Beispiel #6
0
 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));
 }