Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
        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));
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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)));
        }
Exemplo n.º 7
0
        // 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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        // 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);
                }
            }
        }