예제 #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
        public bool KeyChanged(ITableConfig table)
        {
            if (!this.Exists(table))
            {
                return(false);
            }
            var key = default(object);

            if (!this.HasKey(table, out key))
            {
                return(true);
            }
            var item = this.Get(table);

            if (!EqualityComparerFactory.Instance.Create(table.PrimaryKey.Property.PropertyType).Equals(EntityKey.GetKey(table, item), key))
            {
                return(true);
            }
            return(false);
        }