Пример #1
0
        public virtual TY Select <T, TY>(Guid id) where TY : Dwarf <TY>, new()
        {
            if (typeof(TY).Implements <ICompositeId>())
            {
                throw new InvalidOperationException("Use SelectReferencing for CompositeId types");
            }

            var command = new QueryBuilderLight().Select <TY>().From <TY>().Where <TY>("Id", id).ToQuery(true);

            TY result;

            if (!typeof(TY).Implements <ICacheless>() && CacheManager.TryGetCache(id, out result))
            {
                return(result);
            }

            var sdr = ExecuteReader <T, TY>(command);

            try
            {
                result = sdr.Read() ? TupleToObject <TY>(sdr) : null;
            }
            catch (Exception e)
            {
                DwarfContext <T> .GetConfiguration().ErrorLogService.Logg(e);

                throw new DatabaseOperationException(e.Message, e);
            }
            finally
            {
                sdr.Close();
            }

            return(typeof(TY).Implements <ICacheless>() ? result : CacheManager.SetCache(id, result));
        }
Пример #2
0
        /// <summary>
        ///Inserts two foreign key refernces into a mapping tables
        /// </summary>
        public virtual List <T> SelectManyToMany <T>(IDwarf owner, string alternateTableName = null) where T : Dwarf <T>, new()
        {
            if (owner == null || !owner.IsSaved)
            {
                return(new List <T>());
            }

            var targetType = typeof(T);
            var ownerType  = owner.GetType();

            var tableName = ManyToManyAttribute.GetManyToManyTableName(targetType, ownerType, alternateTableName);

            var command = new QueryBuilderLight().Select <T>()
                          .From <T>()
                          .InnerJoin("[" + tableName + "] ON [" + tableName + "].[" + targetType.Name + "Id] = [" + targetType.Name + "].[Id]")
                          .Where("[" + tableName + "].[" + ownerType.Name + "Id]", owner.Id, ownerType).ToQuery();

            if (!typeof(T).Implements <ICacheless>())
            {
                var cache = CacheManager.GetCacheList <T>(command);
                if (cache != null)
                {
                    return(cache);
                }
            }

            var sdr = ExecuteReader <T>(command);

            var result = new List <T>();

            try
            {
                while (sdr.Read())
                {
                    result.Add(TupleToObject <T>(sdr));
                }
            }
            catch (Exception e)
            {
                DwarfContext <T> .GetConfiguration().ErrorLogService.Logg(e);

                throw new DatabaseOperationException(e.Message, e);
            }
            finally
            {
                sdr.Close();
            }

            return(typeof(T).Implements <ICacheless>() ? result : CacheManager.SetCacheList(command, result));
        }