/// <summary> /// Defines an entity from anonymous type /// </summary> /// <typeparam name="TModel">Anonymous type</typeparam> /// <param name="database"><see cref="Database"/> instance</param> /// <param name="schema">Schema name</param> /// <param name="name">Table name</param> /// <param name="model">Anonymous type</param> /// <returns><see cref="Database"/> Instance</returns> public static EntityResult <TModel> DefineEntity <TModel>(this Database database, string schema, string name, TModel model) where TModel : class { var result = new EntityResult <TModel> { Model = model, Table = new Table { Schema = schema, Name = name } }; foreach (var property in model.GetType().GetProperties()) { result.Table.Columns.Add(new Column { Name = property.Name }); } database.Tables.Add(result.Table); return(result); }
/// <summary> /// /// </summary> /// <typeparam name="TModel"></typeparam> /// <typeparam name="TProperty"></typeparam> /// <param name="result"></param> /// <param name="selector"></param> /// <param name="column"></param> /// <returns></returns> public static EntityResult <TModel> SetColumnForProperty <TModel, TProperty>(this EntityResult <TModel> result, Expression <Func <TModel, TProperty> > selector, Column column) where TModel : class { if (string.IsNullOrEmpty(column.Name)) { column.Name = GetPropertyName(selector); } if (result.Table.Columns.Contains(column)) { result.Table[column.Name].Type = column.Type; result.Table[column.Name].Length = column.Length; result.Table[column.Name].Prec = column.Prec; result.Table[column.Name].Scale = column.Scale; result.Table[column.Name].Nullable = column.Nullable; result.Table[column.Name].Collation = column.Collation; result.Table[column.Name].Description = column.Description; } else { result.Table.Columns.Add(column); } return(result); }