| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace SqlSugar
- {
- public class DmCodeFirst : CodeFirstProvider
- {
- public override void NoExistLogic(EntityInfo entityInfo)
- {
- var tableName = GetTableName(entityInfo);
- //Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1");
- List<DbColumnInfo> columns = new List<DbColumnInfo>();
- if (entityInfo.Columns.HasValue())
- {
- foreach (var item in entityInfo.Columns.Where(it=>it.IsIgnore==false))
- {
- DbColumnInfo dbColumnInfo = this.EntityColumnToDbColumn(entityInfo, tableName, item);
- columns.Add(dbColumnInfo);
- }
- if (entityInfo.IsCreateTableFiledSort)
- {
- columns = columns.OrderBy(c => c.CreateTableFieldSort).ToList();
- columns = columns.OrderBy(it => it.IsPrimarykey ? 0 : 1).ToList();
- }
- }
- columns = columns.OrderBy(it => it.IsPrimarykey ? 0 : 1).ToList();
- this.Context.DbMaintenance.CreateTable(tableName, columns,true);
- }
- protected override DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
- {
- var propertyType = UtilMethods.GetUnderType(item.PropertyInfo);
- var result = new DbColumnInfo()
- {
- TableId = entityInfo.Columns.IndexOf(item),
- DbColumnName = item.DbColumnName.HasValue() ? item.DbColumnName : item.PropertyName,
- IsPrimarykey = item.IsPrimarykey,
- IsIdentity = item.IsIdentity,
- TableName = tableName,
- IsNullable = item.IsNullable,
- DefaultValue = item.DefaultValue,
- ColumnDescription = item.ColumnDescription,
- Length = item.Length,
- DecimalDigits= item.DecimalDigits,
- Scale=item.DecimalDigits,
- CreateTableFieldSort = item.CreateTableFieldSort
- };
- GetDbType(item, propertyType, result);
- if (result.DataType.Equals("varchar", StringComparison.CurrentCultureIgnoreCase) && result.Length == 0)
- {
- result.Length = 1;
- }
- return result;
- }
- protected override void GetDbType(EntityColumnInfo item, Type propertyType, DbColumnInfo result)
- {
- if (!string.IsNullOrEmpty(item.DataType))
- {
- result.DataType = item.DataType;
- }
- else if (item.DataType == null && item.UnderType == UtilConstants.LongType)
- {
- result.Length = 0;
- result.DecimalDigits = 0;
- result.DataType = "NUMBER(19,0)";
- }
- else if (propertyType.IsEnum())
- {
- result.DataType = this.Context.Ado.DbBind.GetDbTypeName(item.Length > 9 ? UtilConstants.LongType.Name : UtilConstants.IntType.Name);
- }
- else
- {
- if (propertyType.Name.Equals("Guid", StringComparison.CurrentCultureIgnoreCase))
- {
- result.DataType = this.Context.Ado.DbBind.GetDbTypeName(UtilConstants.StringType.Name);
- if (result.Length <= 1)
- {
- result.Length = 36;
- }
- }
- else
- {
- result.DataType = this.Context.Ado.DbBind.GetDbTypeName(propertyType.Name);
- }
- }
- }
- protected override void ConvertColumns(List<DbColumnInfo> dbColumns)
- {
- foreach (var item in dbColumns)
- {
- if (item.DataType == "DateTime")
- {
- item.Length = 0;
- }
- }
- }
- protected override void ChangeKey(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
- {
- this.Context.DbMaintenance.UpdateColumn(tableName, EntityColumnToDbColumn(entityInfo, tableName, item));
- if (!item.IsPrimarykey)
- this.Context.DbMaintenance.DropConstraint(tableName,null);
- if (item.IsPrimarykey)
- this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName);
- }
- }
- }
|