PostgreSQLCodeFirst.cs 3.6 KB

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