Exemplo n.º 1
0
        public static T Find(long id)
        {
            if (id == null)
            {
                return(null);
            }

            ActiveRecordMap activeRecordMap = ActiveRecord <T> .GetMap();

            string query = @"SELECT " + SqlBuilderServices.BuildSqlColumnList(activeRecordMap.ColumnList(true), activeRecordMap.TableName, SqlBuilderServices.ColumnListType.List)
                           + " FROM " + activeRecordMap.TableName
                           + " WHERE " + activeRecordMap.PrimaryKeyColumnName + " = @" + activeRecordMap.PrimaryKeyColumnName;


            SqlParameter[] parameters = new SqlParameter[]
            {
                new SqlParameter(activeRecordMap.PrimaryKeyColumnName
                                 , SqlBuilderServices.GetDBTypeFromSystemType(activeRecordMap.PrimaryKeyColumnMap.Property.PropertyType)
                                 , id)
            };

            IDataReader dataReader = _activeRecordSession.DatabaseServices.ExecuteDataReader(query, parameters);

            return(ObjectRetrievalServices.RetrieveObject <T>(dataReader, activeRecordMap));
        }
        private static void UnloadGraph <T>(T obj, ActiveRecordMap activeRecordMap) where T : class, IActiveRecord, new()
        {
            foreach (BelongsToMap belongsToMap in activeRecordMap.BelongsToMappings)
            {
                IRelationship relationship = (IRelationship)belongsToMap.Field.GetValue(obj);

                relationship.Unload();
            }

            foreach (HasOneMap hasOneMap in activeRecordMap.HasOneMappings)
            {
                IRelationship relationship = (IRelationship)hasOneMap.Field.GetValue(obj);

                relationship.Unload();
            }

            foreach (HasManyMap hasManyMap in activeRecordMap.HasManyMappings)
            {
                IRelationship relationship = (IRelationship)hasManyMap.Field.GetValue(obj);

                relationship.Unload();
            }

            foreach (HasAndBelongsToManyMap hasAndBelongsToManyMap in activeRecordMap.HasAndBelongsToManyMappings)
            {
                IRelationship relationship = (IRelationship)hasAndBelongsToManyMap.Field.GetValue(obj);

                relationship.Unload();
            }
        }
Exemplo n.º 3
0
        public static List <T> FindManyWithSql(String sqlQuery)
        {
            ActiveRecordMap activeRecordMap = ActiveRecord <T> .GetMap();

            IDataReader dataReader = _activeRecordSession.DatabaseServices.ExecuteDataReader(sqlQuery);

            return(ObjectRetrievalServices.RetrieveObjects <T>(dataReader, activeRecordMap));
        }
        public static List <T> RetrieveObjects <T>(IDataReader dataReader, ActiveRecordMap activeRecordMap, int maxListCount, bool refresh) where T : class, IActiveRecord, new()
        {
            List <T> objectList = new List <T>();

            while (dataReader.Read() && objectList.Count <= maxListCount)
            {
                T obj = new T();

                //Map primary key column property value
                Type   keyPropertyType = activeRecordMap.PrimaryKeyColumnMap.Property.PropertyType;
                String keyColumnName   = activeRecordMap.PrimaryKeyColumnName;
                object keyValue        = Convert.ChangeType(dataReader[keyColumnName], keyPropertyType);

                if (ActiveRecordSession.GetSession().ActiveRecordCache[typeof(T)].ContainsKey(keyValue) && !refresh)
                {
                    obj = ActiveRecordSession.GetSession().ActiveRecordCache[typeof(T)][keyValue] as T;
                }
                else
                {
                    if (refresh && ActiveRecordSession.GetSession().ActiveRecordCache[typeof(T)].ContainsKey(keyValue))
                    {
                        obj = ActiveRecordSession.GetSession().ActiveRecordCache[typeof(T)][keyValue] as T;
                        UnloadGraph <T>(obj, activeRecordMap);
                    }

                    activeRecordMap.PrimaryKeyColumnMap.Property.SetValue(obj, keyValue, null);

                    //Set column property values
                    foreach (ColumnMap columnMap in activeRecordMap.ColumnMappings.Values)
                    {
                        Type   propertyType = columnMap.Property.PropertyType;
                        String columnName   = columnMap.ColumnName;
                        //TODO: Implement better null handleing
                        if (dataReader[columnName] != DBNull.Value)
                        {
                            object columnValue = Convert.ChangeType(dataReader[columnName], propertyType);
                            columnMap.Property.SetValue(obj, columnValue, null);
                        }
                    }

                    obj.FinalizeRetrieval();

                    if (!refresh)
                    {
                        ActiveRecordSession.GetSession().ActiveRecordCache[typeof(T)].Add(keyValue, obj);
                    }

                    LoadGraph <T>(obj, activeRecordMap);
                }

                objectList.Add(obj);
            }

            dataReader.Close();

            return(objectList);
        }
Exemplo n.º 5
0
        public static List <T> FindAll()
        {
            ActiveRecordMap activeRecordMap = ActiveRecord <T> .GetMap();

            string query = @"SELECT " + SqlBuilderServices.BuildSqlColumnList(activeRecordMap.ColumnList(true), activeRecordMap.TableName, SqlBuilderServices.ColumnListType.List)
                           + " FROM " + activeRecordMap.TableName;

            IDataReader dataReader = _activeRecordSession.DatabaseServices.ExecuteDataReader(query);

            return(ObjectRetrievalServices.RetrieveObjects <T>(dataReader, activeRecordMap));
        }
Exemplo n.º 6
0
        public static T FindFirstWhere(String where, SqlParameter[] parameters)
        {
            ActiveRecordMap activeRecordMap = ActiveRecord <T> .GetMap();

            string query = @"SELECT " + SqlBuilderServices.BuildSqlColumnList(activeRecordMap.ColumnList(true), activeRecordMap.TableName, SqlBuilderServices.ColumnListType.List)
                           + " FROM " + activeRecordMap.TableName
                           + " WHERE " + where;

            IDataReader dataReader = _activeRecordSession.DatabaseServices.ExecuteDataReader(query, parameters);

            return(ObjectRetrievalServices.RetrieveObject <T>(dataReader, activeRecordMap));
        }
        public static T RetrieveObject <T>(IDataReader dataReader, ActiveRecordMap activeRecordMap, bool refresh) where T : class, IActiveRecord, new()
        {
            List <T> objectList = RetrieveObjects <T>(dataReader, activeRecordMap, 1, refresh);

            if (objectList.Count > 0)
            {
                return(objectList[0]);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 8
0
        public static ActiveRecordMap GetMap(Type type)
        {
            ActiveRecordMap activeRecordMap;

            if (_activeRecordSession.ActiveRecordMapCache.ContainsKey(type))
            {
                activeRecordMap = _activeRecordSession.ActiveRecordMapCache[type];
            }
            else
            {
                activeRecordMap = new ActiveRecordMap(type);
                _activeRecordSession.ActiveRecordMapCache.Add(type, activeRecordMap);
            }

            return(activeRecordMap);
        }
Exemplo n.º 9
0
        public void Refresh()
        {
            ActiveRecordMap activeRecordMap = ActiveRecord <T> .GetMap();

            string query = @"SELECT " + SqlBuilderServices.BuildSqlColumnList(activeRecordMap.ColumnList(true), activeRecordMap.TableName, SqlBuilderServices.ColumnListType.List)
                           + " FROM " + activeRecordMap.TableName
                           + " WHERE " + activeRecordMap.PrimaryKeyColumnName + " = @" + activeRecordMap.PrimaryKeyColumnName;


            SqlParameter[] parameters = new SqlParameter[]
            {
                new SqlParameter(activeRecordMap.PrimaryKeyColumnName
                                 , SqlBuilderServices.GetDBTypeFromSystemType(activeRecordMap.PrimaryKeyColumnMap.Property.PropertyType)
                                 , this.Id)
            };

            IDataReader dataReader = _activeRecordSession.DatabaseServices.ExecuteDataReader(query, parameters);

            ObjectRetrievalServices.RetrieveObject <T>(dataReader, activeRecordMap, true);
        }
Exemplo n.º 10
0
        private void Initialize()
        {
            if (!_activeRecordSession.ActiveRecordCache.ContainsKey(typeof(T)))
            {
                _activeRecordSession.ActiveRecordCache.Add(typeof(T), new Dictionary <object, object>());
            }

            if (_activeRecordMap == null)
            {
                _activeRecordMap = ActiveRecord <T> .GetMap();
            }

            InitializeRelationships();

            _objectStatus = ObjectStatus.New;

            if (_activeRecordMap.PrimaryKeyColumnMap != null)
            {
                _activeRecordMap.PrimaryKeyColumnMap.Property.SetValue(this, -1, null);
            }
        }
        public static List <T> RetrieveObjects <T>(IDataReader dataReader, ActiveRecordMap activeRecordMap, bool refresh) where T : class, IActiveRecord, new()
        {
            List <T> objectList = RetrieveObjects <T>(dataReader, activeRecordMap, int.MaxValue, refresh);

            return(objectList);
        }
 public static T RetrieveObject <T>(IDataReader dataReader, ActiveRecordMap activeRecordMap) where T : class, IActiveRecord, new()
 {
     return(RetrieveObject <T>(dataReader, activeRecordMap, false));
 }