| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- namespace SqlSugar
- {
- public class QuestDBCodeFirst : CodeFirstProvider
- {
- protected override void ExistLogicEnd(List<EntityColumnInfo> dbColumns)
- {
- foreach (EntityColumnInfo column in dbColumns)
- {
- if (column.DefaultValue != null)
- {
- this.Context.DbMaintenance.AddDefaultValue(column.DbTableName,column.DbColumnName,column.DefaultValue.ToSqlValue());
- }
- }
- }
- 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();
- foreach (var propety in entityInfo.Type.GetProperties())
- {
- var timeAttr= propety.GetCustomAttribute<TimeDbSplitFieldAttribute>();
- if (timeAttr != null)
- {
- var colName = columns.FirstOrDefault(it => it.PropertyName == propety.Name)?.DbColumnName;
- tableName +=$"_TIMESTAMP({colName}) PARTITION BY {timeAttr.DateType} ";
- }
- }
- 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,
- PropertyName=item.PropertyName,
- Length = item.Length,
- CreateTableFieldSort = item.CreateTableFieldSort
- };
- if (propertyType == UtilConstants.DecType)
- {
- result.Scale = item.DecimalDigits;
- result.DecimalDigits = item.DecimalDigits;
- }
- GetDbType(item, propertyType, result);
- if (item.IsJson)
- {
- result.DataType = "string";
- }
- if (result.DataType.Equals("varchar", StringComparison.CurrentCultureIgnoreCase) && result.Length == 0)
- {
- result.Length = 1;
- }
- return result;
- }
- 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);
- }
- }
- }
|