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);