using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata; namespace YiSha.Data.EF { /// /// 主键约定,把属性Id当做数据库主键 /// public class PrimaryKeyConvention { public static void SetPrimaryKey(ModelBuilder modelBuilder, string entityName) { modelBuilder.Entity(entityName).HasKey("Id"); } } /// /// 列名约定,比如属性ParentId,映射到数据库字段parent_id /// [Obsolete] public class ColumnConvention { public static void SetColumnName(ModelBuilder modelBuilder, string entityName, string propertyName) { StringBuilder sbField = new StringBuilder(); char[] charArr = propertyName.ToCharArray(); int iCapital = 0; // 把属性第一个开始的大写字母转成小写,直到遇到了第1个小写字母,因为数据库里面是小写的 while (iCapital < charArr.Length) { if (charArr[iCapital] >= 'A' && charArr[iCapital] <= 'Z') { charArr[iCapital] = (char)(charArr[iCapital] + 32); } else { break; } iCapital++; } for (int i = 0; i < charArr.Length; i++) { if (charArr[i] >= 'A' && charArr[i] <= 'Z') { charArr[i] = (char)(charArr[i] + 32); sbField.Append("_" + charArr[i]); } else { sbField.Append(charArr[i]); } } modelBuilder.Entity(entityName).Property(propertyName).HasColumnName(sbField.ToString()); } } }