OscarCodeFirst.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace SqlSugar
  6. {
  7. public class OscarCodeFirst : CodeFirstProvider
  8. {
  9. public override void NoExistLogic(EntityInfo entityInfo)
  10. {
  11. var tableName = GetTableName(entityInfo);
  12. //Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1");
  13. List<DbColumnInfo> columns = new List<DbColumnInfo>();
  14. if (entityInfo.Columns.HasValue())
  15. {
  16. foreach (var item in entityInfo.Columns.Where(it=>it.IsIgnore==false))
  17. {
  18. DbColumnInfo dbColumnInfo = this.EntityColumnToDbColumn(entityInfo, tableName, item);
  19. columns.Add(dbColumnInfo);
  20. }
  21. if (entityInfo.IsCreateTableFiledSort)
  22. {
  23. columns = columns.OrderBy(c => c.CreateTableFieldSort).ToList();
  24. }
  25. }
  26. this.Context.DbMaintenance.CreateTable(tableName, columns,true);
  27. }
  28. protected override DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
  29. {
  30. var propertyType = UtilMethods.GetUnderType(item.PropertyInfo);
  31. var result = new DbColumnInfo()
  32. {
  33. TableId = entityInfo.Columns.IndexOf(item),
  34. DbColumnName = item.DbColumnName.HasValue() ? item.DbColumnName : item.PropertyName,
  35. IsPrimarykey = item.IsPrimarykey,
  36. IsIdentity = item.IsIdentity,
  37. TableName = tableName,
  38. IsNullable = item.IsNullable,
  39. DefaultValue = item.DefaultValue,
  40. ColumnDescription = item.ColumnDescription,
  41. Length = item.Length
  42. };
  43. if (propertyType == UtilConstants.DecType)
  44. {
  45. result.Scale = item.DecimalDigits;
  46. result.DecimalDigits = item.DecimalDigits;
  47. }
  48. GetDbType(item, propertyType, result);
  49. if (result.DataType.Equals("varchar", StringComparison.CurrentCultureIgnoreCase) && result.Length == 0)
  50. {
  51. result.Length = 1;
  52. }
  53. return result;
  54. }
  55. protected override void ConvertColumns(List<DbColumnInfo> dbColumns)
  56. {
  57. foreach (var item in dbColumns)
  58. {
  59. if (item.DataType == "DateTime")
  60. {
  61. item.Length = 0;
  62. }
  63. }
  64. }
  65. protected override void ChangeKey(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
  66. {
  67. //this.Context.DbMaintenance.UpdateColumn(tableName, EntityColumnToDbColumn(entityInfo, tableName, item));
  68. //if (!item.IsPrimarykey)
  69. // this.Context.DbMaintenance.DropConstraint(tableName,null);
  70. //if (item.IsPrimarykey)
  71. // this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName);
  72. }
  73. }
  74. }