internal ColumnAttribute(ColumnAttribute ca) { MemberName = ca.MemberName; Configuration = ca.Configuration; Name = ca.Name; DataType = ca.DataType; DbType = ca.DbType; Storage = ca.Storage; IsDiscriminator = ca.IsDiscriminator; PrimaryKeyOrder = ca.PrimaryKeyOrder; IsColumn = ca.IsColumn; if (ca.HasSkipOnInsert()) SkipOnInsert = ca.SkipOnInsert; if (ca.HasSkipOnUpdate()) SkipOnUpdate = ca.SkipOnUpdate; if (ca.HasCanBeNull()) CanBeNull = ca.CanBeNull; if (ca.HasIsIdentity()) IsIdentity = ca.IsIdentity; if (ca.HasIsPrimaryKey()) IsPrimaryKey = ca.IsPrimaryKey; }
void SetColumn(ColumnAttribute attr) { if (attr.MemberName == null) throw new LinqToDBException("The Column attribute of the '{0}' type must have MemberName.".Args(TypeAccessor.Type)); if (attr.MemberName.IndexOf('.') < 0) { var ex = TypeAccessor[attr.MemberName]; var cd = new ColumnDescriptor(_mappingSchema, attr, ex); Columns.Add(cd); _columnNames.Add(attr.MemberName, cd); } else { var cd = new ColumnDescriptor(_mappingSchema, attr, new MemberAccessor(TypeAccessor, attr.MemberName)); Columns.Add(cd); _columnNames.Add(attr.MemberName, cd); } }
internal ColumnAttribute(string memberName, ColumnAttribute ca) : this(ca) { MemberName = memberName + "." + ca.MemberName.TrimStart('.'); }
public ColumnDescriptor(MappingSchema mappingSchema, ColumnAttribute columnAttribute, MemberAccessor memberAccessor) { MappingSchema = mappingSchema; MemberAccessor = memberAccessor; MemberInfo = memberAccessor.MemberInfo; if (MemberInfo.IsFieldEx()) { var fieldInfo = (FieldInfo)MemberInfo; MemberType = fieldInfo.FieldType; } else if (MemberInfo.IsPropertyEx()) { var propertyInfo = (PropertyInfo)MemberInfo; MemberType = propertyInfo.PropertyType; } MemberName = columnAttribute.MemberName ?? MemberInfo.Name; ColumnName = columnAttribute.Name ?? MemberInfo.Name; Storage = columnAttribute.Storage; PrimaryKeyOrder = columnAttribute.PrimaryKeyOrder; IsDiscriminator = columnAttribute.IsDiscriminator; DataType = columnAttribute.DataType; DbType = columnAttribute.DbType; CreateFormat = columnAttribute.CreateFormat; if (columnAttribute.HasLength ()) Length = columnAttribute.Length; if (columnAttribute.HasPrecision()) Precision = columnAttribute.Precision; if (columnAttribute.HasScale ()) Scale = columnAttribute.Scale; if (Storage == null) { StorageType = MemberType; StorageInfo = MemberInfo; } else { var expr = Expression.PropertyOrField(Expression.Constant(null, MemberInfo.DeclaringType), Storage); StorageType = expr.Type; StorageInfo = expr.Member; } var defaultCanBeNull = false; if (columnAttribute.HasCanBeNull()) CanBeNull = columnAttribute.CanBeNull; else { var na = mappingSchema.GetAttribute<NullableAttribute>(MemberInfo, attr => attr.Configuration); if (na != null) { CanBeNull = na.CanBeNull; } else { CanBeNull = mappingSchema.GetCanBeNull(MemberType); defaultCanBeNull = true; } } if (columnAttribute.HasIsIdentity()) IsIdentity = columnAttribute.IsIdentity; else { var a = mappingSchema.GetAttribute<IdentityAttribute>(MemberInfo, attr => attr.Configuration); if (a != null) IsIdentity = true; } SkipOnInsert = columnAttribute.HasSkipOnInsert() ? columnAttribute.SkipOnInsert : IsIdentity; SkipOnUpdate = columnAttribute.HasSkipOnUpdate() ? columnAttribute.SkipOnUpdate : IsIdentity; if (defaultCanBeNull && IsIdentity) CanBeNull = false; if (columnAttribute.HasIsPrimaryKey()) IsPrimaryKey = columnAttribute.IsPrimaryKey; else { var a = mappingSchema.GetAttribute<PrimaryKeyAttribute>(MemberInfo, attr => attr.Configuration); if (a != null) { IsPrimaryKey = true; PrimaryKeyOrder = a.Order; } } if (DbType == null || DataType == DataType.Undefined) { var a = mappingSchema.GetAttribute<DataTypeAttribute>(MemberInfo, attr => attr.Configuration); if (a != null) { if (DbType == null) DbType = a.DbType; if (DataType == DataType.Undefined && a.DataType.HasValue) DataType = a.DataType.Value; } } }
public ColumnDescriptor(MappingSchema mappingSchema, ColumnAttribute columnAttribute, MemberAccessor memberAccessor) { MappingSchema = mappingSchema; MemberAccessor = memberAccessor; MemberInfo = memberAccessor.MemberInfo; if (MemberInfo.IsFieldEx()) { var fieldInfo = (FieldInfo)MemberInfo; MemberType = fieldInfo.FieldType; } else if (MemberInfo.IsPropertyEx()) { var propertyInfo = (PropertyInfo)MemberInfo; MemberType = propertyInfo.PropertyType; } MemberName = columnAttribute.MemberName ?? MemberInfo.Name; ColumnName = columnAttribute.Name ?? MemberInfo.Name; Storage = columnAttribute.Storage; PrimaryKeyOrder = columnAttribute.PrimaryKeyOrder; IsDiscriminator = columnAttribute.IsDiscriminator; DataType = columnAttribute.DataType; DbType = columnAttribute.DbType; Length = columnAttribute.Length; Precision = columnAttribute.Precision; Scale = columnAttribute.Scale; var defaultCanBeNull = false; if (columnAttribute.HasCanBeNull()) CanBeNull = columnAttribute.CanBeNull; else { var na = mappingSchema.GetAttribute<NullableAttribute>(MemberInfo, attr => attr.Configuration); if (na != null) { CanBeNull = na.CanBeNull; } else { CanBeNull = mappingSchema.GetCanBeNull(MemberType); defaultCanBeNull = true; } } if (columnAttribute.HasIsIdentity()) IsIdentity = columnAttribute.IsIdentity; else { var a = mappingSchema.GetAttribute<IdentityAttribute>(MemberInfo, attr => attr.Configuration); if (a != null) IsIdentity = true; } SkipOnInsert = columnAttribute.HasSkipOnInsert() ? columnAttribute.SkipOnInsert : IsIdentity; SkipOnUpdate = columnAttribute.HasSkipOnUpdate() ? columnAttribute.SkipOnUpdate : IsIdentity; if (defaultCanBeNull && IsIdentity) CanBeNull = false; if (columnAttribute.HasIsPrimaryKey()) IsPrimaryKey = columnAttribute.IsPrimaryKey; else { var a = mappingSchema.GetAttribute<PrimaryKeyAttribute>(MemberInfo, attr => attr.Configuration); if (a != null) { IsPrimaryKey = true; PrimaryKeyOrder = a.Order; } } }