Пример #1
0
        private string GetSelectSql(int?count, string additionalSql)
        {
            IClassMetadata             metadata        = this.Session.SessionFactory.GetClassMetadata(typeof(ModelType));
            SingleTableEntityPersister entityPersister = metadata as SingleTableEntityPersister;

            string[] subclassColumnClosure = entityPersister.GetType().GetProperty("SubclassColumnClosure", BindingFlags.NonPublic | BindingFlags.Instance)
                                             .GetValue(entityPersister, null) as string[];
            List <string> selectColumns = new List <string>();
            string        idColumn      = entityPersister.IdentifierPropertyName;

            selectColumns.Add(idColumn);
            for (int i = 0; i < entityPersister.PropertyNames.Length; i++)
            {
                string propertyName = entityPersister.PropertyNames[i];
                string columnName   = subclassColumnClosure[i];
                string selectColumn = columnName;
                if (propertyName != columnName)
                {
                    selectColumn = string.Format("{0} as {1}", columnName, propertyName);
                }
                selectColumns.Add(selectColumn);
            }
            string top = "";

            if (count.HasValue)
            {
                top = "top " + count;
            }

            string sql = string.Format("SELECT {0} {1} from {2} {3}", top, string.Join(",", selectColumns), entityPersister.TableName, additionalSql);

            return(sql);
        }
Пример #2
0
        private void GetClasses(ISession session)
        {
            IDictionary metadata = session.SessionFactory.GetAllClassMetadata();

            foreach (DictionaryEntry entry in metadata)
            {
                SingleTableEntityPersister persister = (SingleTableEntityPersister)entry.Value;
                m_Classes.Add(persister.ClassName, new DomainClass(session, persister.TableName));
            }
        }
Пример #3
0
        private StandardProperty GetProperty(SingleTableEntityPersister persister, string propertyName)
        {
            for (int i = 0; i < persister.PropertyNames.Length; i++)
            {
                if (persister.PropertyNames[i] == propertyName)
                {
                    return(persister.EntityMetamodel.Properties[i]);
                }
            }

            throw new ODataException(String.Format(ErrorMessages.ODataRequest_PropertyDoesNotExistOnParent, persister.EntityType.ReturnedClass.Name, propertyName));
        }
Пример #4
0
        public FilteredQueryOver(ISession session)
        {
            session.ThrowIfNull("session");

            Session = session;
            var metadata = Session.SessionFactory.GetClassMetadata(typeof(TEntity));

            entityPersister     = metadata as SingleTableEntityPersister;
            naturalIdProperties = metadata.NaturalIdentifierProperties.Select(x => metadata.PropertyNames[x]).ToList();
            var criteria         = (CriteriaImpl)Session.CreateCriteria <TEntity>();
            var selectTranslator = new CriteriaQueryTranslator(Session.GetSessionImplementation().Factory, criteria,
                                                               criteria.EntityOrClassName, "_Data");

            foreach (var property in metadata.PropertyNames)
            {
                selectedPropertyToColumnAliasMap[property] =
                    selectTranslator.GetColumnsUsingProjection(criteria, property).ToList();
            }
            baseSelectSql = criteria.GenerateSql(translator: selectTranslator);
        }