示例#1
0
 private EntityStateDetector()
 {
     this.ExistsStrategy = new Lazy <EntityStateDetectorExistsStrategy>(() =>
     {
         foreach (var column in this.Table.PrimaryKeys)
         {
             if (column.Flags.HasFlag(ColumnFlags.Generated))
             {
                 continue;
             }
             return(item =>
             {
                 var query = this.Database.QueryCache.Exists(this.Table);
                 var parameters = new PrimaryKeysParameterHandlerStrategy(this.Table, item);
                 var exists = this.Database.ExecuteScalar <bool>(query, parameters.Handler, this.Transaction);
                 if (exists)
                 {
                     return EntityState.Exists;
                 }
                 return EntityState.None;
             });
         }
         return(item =>
         {
             if (EntityKey.HasKey(this.Table, item))
             {
                 return EntityState.Exists;
             }
             return EntityState.None;
         });
     });
     this.FetchStrategy = new Lazy <EntityStateDetectorFetchStrategy>(() =>
     {
         return((object item, out object persisted) =>
         {
             if (EntityKey.HasKey(this.Table, item))
             {
                 var set = this.Database.Set(item.GetType(), this.Database.Source(this.Composer, this.Transaction));
                 persisted = set.Find(EntityKey.GetKey(this.Table, item));
                 if (persisted != null)
                 {
                     return EntityState.Exists;
                 }
             }
             persisted = null;
             return EntityState.None;
         });
     });
 }
示例#2
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);
             }
         }
     }
 }