/// <summary> /// Build schema table from entity mapping /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entityMapping"></param> /// <param name="additionColumns">Additional columns not defined in mapper</param> /// <returns></returns> public static DataTable BuildSchemaTableFromEntityMapping <T>(IEntityMapper <T> entityMapping, params SchemaMappingColumn[] additionColumns) where T : class { Expect.IsNotNull(entityMapping, nameof(entityMapping)); var columns = new List <SchemaMappingColumn>(); foreach (var fieldMapper in entityMapping.FieldMappers) { Type dataType = fieldMapper.PropertyType; bool allowDbNull = !dataType.IsValueType; if (dataType.IsNullableType()) { dataType = dataType.GetNullableBaseType(); allowDbNull = !dataType.IsValueType; } if (dataType.IsEnum) { dataType = typeof(int); } var column = new SchemaMappingColumn(fieldMapper.FieldName, dataType, allowDbNull); columns.Add(column); } if (additionColumns != null) { columns.AddRange(additionColumns); } return(BuildSchemaTable(columns.ToArray())); }
private static void AddRow(DataTable table, SchemaMappingColumn column) { Expect.IsNotNull(table, nameof(table)); Expect.IsNotNull(column, nameof(column)); var row = table.NewRow(); row["ColumnName"] = column.ColumnName; row["DataType"] = column.DataType; row["AllowDBNull"] = column.AllowDBNull; table.Rows.Add(row); }
public void SortByName() { var entityMapper = MappingFactory.CreateEntityMappingFromAnnonations <NotNullEntity>(); var schemaTable = DataSourceBuilder.BuildSchemaTableFromEntityMapping(entityMapper); var schemaMapping = new SchemaMapping(); schemaMapping.Load(schemaTable); var columns = schemaMapping.Columns.ToArray(); SchemaMappingColumn.SortByName(columns, "FID", "FIntProp", "FLongProp"); Assert.AreEqual("FID", columns[0].ColumnName); }
private void SetEntity(SchemaMappingColumn[] additionalColumns, string[] sortNames, object[][] data) { additionalColumns = additionalColumns ?? new SchemaMappingColumn[0]; var schemaMapping = DataSourceBuilder.BuildSchemaMappingFromEntityMapping(_mapper, additionalColumns); var columns = schemaMapping.Columns.ToArray(); SchemaMappingColumn.SortByName(columns, sortNames); var dataReader = DataSourceBuilder.BuildDataReader(columns, data); var entityReader = new EntityReader <NotNullEntity>(_mapper, dataReader.GetSchemaTable()); dataReader.Read(); entityReader.SetEntity(dataReader, _entity); }
public void SetEntity_AllFields_WithAdditional() { var additionColumn = new SchemaMappingColumn("FOtherProp", typeof(string), true); var columnNames = new[] { "FID", "FIntProp", "FShortProp", "FLongProp", "FFloatProp", "FDoubleProp", "FDecimalProp", "FBoolProp", "FStringProp", "FDateTimeProp", "FBinaryProp", "FGuidProp", "FEnumProp", "FOtherProp" }; var data = new object[][] { new object[] { 1, 1, (short)1, 1L, 1F, 1D, 1M, true, "abc", DateTime.Now, new byte[0], Guid.NewGuid(), (int)FileMode.CreateNew, "other" }, }; SetEntity(new[] { additionColumn }, columnNames, data); AssertEntityProperties(data[0]); }
public void ClrType(Type dataType, bool allowDbNull, Type clrType) { var column = new SchemaMappingColumn("column", dataType, allowDbNull); Assert.AreEqual(clrType, column.ClrType); }