MapConventions.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.ComponentModel.DataAnnotations.Schema;
  7. using Microsoft.EntityFrameworkCore;
  8. using Microsoft.EntityFrameworkCore.Metadata;
  9. namespace YiSha.Data.EF
  10. {
  11. /// <summary>
  12. /// 主键约定,把属性Id当做数据库主键
  13. /// </summary>
  14. public class PrimaryKeyConvention
  15. {
  16. public static void SetPrimaryKey(ModelBuilder modelBuilder, string entityName)
  17. {
  18. modelBuilder.Entity(entityName).HasKey("Id");
  19. }
  20. }
  21. /// <summary>
  22. /// 列名约定,比如属性ParentId,映射到数据库字段parent_id
  23. /// </summary>
  24. [Obsolete]
  25. public class ColumnConvention
  26. {
  27. public static void SetColumnName(ModelBuilder modelBuilder, string entityName, string propertyName)
  28. {
  29. StringBuilder sbField = new StringBuilder();
  30. char[] charArr = propertyName.ToCharArray();
  31. int iCapital = 0; // 把属性第一个开始的大写字母转成小写,直到遇到了第1个小写字母,因为数据库里面是小写的
  32. while (iCapital < charArr.Length)
  33. {
  34. if (charArr[iCapital] >= 'A' && charArr[iCapital] <= 'Z')
  35. {
  36. charArr[iCapital] = (char)(charArr[iCapital] + 32);
  37. }
  38. else
  39. {
  40. break;
  41. }
  42. iCapital++;
  43. }
  44. for (int i = 0; i < charArr.Length; i++)
  45. {
  46. if (charArr[i] >= 'A' && charArr[i] <= 'Z')
  47. {
  48. charArr[i] = (char)(charArr[i] + 32);
  49. sbField.Append("_" + charArr[i]);
  50. }
  51. else
  52. {
  53. sbField.Append(charArr[i]);
  54. }
  55. }
  56. modelBuilder.Entity(entityName).Property(propertyName).HasColumnName(sbField.ToString());
  57. }
  58. }
  59. }