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(); } }
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); }
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)); }
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); } }
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); }
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); }
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)); }