关于c#:从MetadataWorkspace读取MaxLength
string connectionString { get { return "Server=;Database=;Integrated Security=SSPI;"; } } [Test] public void Test() { using var dbcontext = new DB_Context(connectionString); var entity = new ResultInfoEntity(); var maxLength = GetMaxLenth(dbcontext, nameof(ResultInfoEntity), nameof(entity.EntName)); } private int GetMaxLenth(DbContext context, string entityName, string propertyName) { var tables = context.Model.GetEntityTypes(); var table = tables.First(type => type.ClrType.Name == entityName); return table.FindProperty(propertyName).GetMaxLength() ?? -1; }
获取数据库字段名和MaxLength,放到字典
static public Dictionary<string, int> GetColumeMaxLengthDictionary<T>(DbContext dbcontext, T entity) { //var entity1 = default(T); //var entity2 = typeof(T); var entityName = typeof(T).Name; var colume_maxLength = new Dictionary<string, int>(); Type type = entity.GetType(); PropertyInfo[] ps = type.GetProperties(); foreach (PropertyInfo i in ps) { if (i.PropertyType == typeof(string) || i.PropertyType == typeof(decimal)) { if (!colume_maxLength.ContainsKey(i.Name)) { var ml = GetMaxLenth(dbcontext, entityName, i.Name); colume_maxLength.Add(i.Name, ml); } } } return colume_maxLength; }
调用
var dbcontext = new DB_Context_CIS(this.CurrentService.ConnectionString); var entity = new ResultInfoEntity(); var maxLengthDictionary = this.GetColumeMaxLengthDictionary(dbcontext, entity); var dbcontextTarget = new DB_Context_CIS(this.CurrentService.TargetConnectionString); var entityTarget = new ResultInfoEntity(); var maxLengthDictionaryTarget = this.GetColumeMaxLengthDictionary(dbcontextTarget, entityTarget);