public void Update(object obj) { if (obj == null) { throw new ArgumentNullException("obj"); } var entityType = obj.GetType(); var metadata = EntityMetadata.Create(entityType); var columnNames = metadata.Columns.Select(f => f.Name).ToArray(); var id = metadata.PrimaryKey.Property.GetValue(obj); var row = _pivotalDataAccess.GetDataRow(metadata.TableName, Id.Create(id), columnNames); _mapper.Map(obj, row); _pivotalDataAccess.SaveDataRow(row); foreach (var secondary in metadata.Secondaries) { var secondaryItems = secondary.Property.GetValue(obj) as IEnumerable; if (secondaryItems == null) { continue; } foreach (var secondaryItem in secondaryItems) { Update(secondaryItem); } } }
public IEnumerable <T> Get <T>(string queryName, params object[] parameters) { var type = typeof(T); var metadata = EntityMetadata.Create(type); var dataTable = _pivotalDataAccess.GetDataTable(queryName, parameters, metadata.Columns.Select(c => c.Name).ToArray()); foreach (DataRow row in dataTable.Rows) { yield return((T)MapRowAndSecondariesToEntity(row, type, metadata)); } }
private IEnumerable <object> GetBySqlInternal(Type type, string whereClause, string topClause) { var metadata = EntityMetadata.Create(type); var dataTable = _pivotalDataAccess.GetDataTableBySql( $"select { topClause } { string.Join(", ", metadata.Columns.Select(c => c.Name)) } from { metadata.TableName } { whereClause }"); foreach (DataRow row in dataTable.Rows) { yield return(MapRowAndSecondariesToEntity(row, type, metadata)); } }
public T Get <T>(byte[] id) { if (id == null) { throw new ArgumentNullException("id"); } var metadata = EntityMetadata.Create(typeof(T)); var dataRow = _pivotalDataAccess.GetDataRow(metadata.TableName, Id.Create(id), metadata.Columns.Select(c => c.Name).ToArray()); var entity = MapRowAndSecondariesToEntity(dataRow, typeof(T), metadata); return((T)entity); }
public void Delele <T>(T obj) { if (obj == null) { throw new ArgumentNullException("obj"); } var entityType = obj.GetType(); var metadata = EntityMetadata.Create(entityType); var id = metadata.PrimaryKey.Property.GetValue(obj); _pivotalDataAccess.Delete(metadata.TableName, Id.Create(id)); }
public static Secondary Create(PropertyInfo property) { var genericArgs = property.PropertyType.GetGenericArguments(); if (genericArgs.Length != 1) { throw new Exception(string.Format( "Unable to determine secondary collection type for property {0} of type {1}", property.Name, property.DeclaringType.FullName)); } var itemType = genericArgs[0]; return(new Secondary(property, itemType, EntityMetadata.Create(itemType))); }
// row --> entity public object Map(DataRow dataRow, Type entityType) { var pivotalObject = Activator.CreateInstance(entityType); var metadata = EntityMetadata.Create(entityType); foreach (var columnInfo in metadata.Columns) { try { SetFieldValue(pivotalObject, dataRow, columnInfo); } catch (Exception ex) { throw new MappingException(string.Format("Unable to map database column {0} to the property {1} of type {2}", columnInfo.Name, columnInfo.Property.Name, entityType.FullName), ex); } } return(pivotalObject); }
public void Insert(object obj) { if (obj == null) { throw new ArgumentNullException("obj"); } var entityType = obj.GetType(); var metadata = EntityMetadata.Create(entityType); var columnNames = metadata.Columns.Select(f => f.Name).ToArray(); var row = _pivotalDataAccess.GetNewDataRow(metadata.TableName, columnNames); _mapper.Map(obj, row); var newRow = _pivotalDataAccess.SaveDataRow(row); _mapper.SetId(obj, newRow, metadata); }
// entity --> row public void Map(object obj, DataRow row) { var metadata = EntityMetadata.Create(obj.GetType()); foreach (var column in metadata.GetAllColumnsExceptPrimaryKey()) { try { var propertyValue = column.Property.GetValue(obj); var dbValue = ConvertPropertyValueToDatabaseValue(propertyValue, column); row[column.Name] = dbValue; } catch (Exception ex) { throw new MappingException(string.Format( "Unable to map property {0} of type {1} to the dabatase filed {2}", column.Property.Name, column.Property.DeclaringType.FullName, column.Name), ex); } } }