动态处理asp.net core ef core在mysql中不支持Table及Column注解

TableAttribute和ColumnAttribute在mysql中映射字段名称时无法被ef解析使用
stackoverflow中有人提供了用反射的做法
不过并没有加上类名只有字段名
这里添加了类名并且优化了写法


新建一个类似DbBase : DbContext的基类
新建一个方法如下


protected void build<TEntity>(ModelBuilder modelBuilder) where TEntity : class
{
Type t = typeof(TEntity);
var etb = modelBuilder.Entity<TEntity>();


var property = t.GetTypeInfo().GetCustomAttribute<TableAttribute>();
if (property != null) modelBuilder.Entity<TEntity>().ToTable(property.Name);


var properties = t.GetTypeInfo().GetProperties(
BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);


foreach (var p in properties)
{
if (p.GetCustomAttribute<NotMappedAttribute>() != null)
{
etb.Ignore(p.Name);
continue;
}


var c = p.GetCustomAttribute<ColumnAttribute>();
if (c != null)
{
etb.Property(p.Name).HasColumnName(c.Name);
continue;
}


etb.Property(p.Name).HasColumnName(p.Name);
}
}
然后让其它类继承这个类时
在重写override void OnModelCreating(ModelBuilder modelBuilder)方法时调用该方法即可

build<User>(modelBuilder);

搞定经测试有效

楼主 神宫寺铃香  发布于 2017-06-12 22:30:00 +0800 CST  

楼主:神宫寺铃香

字数:983

发表时间:2017-06-13 06:30:00 +0800 CST

更新时间:2021-02-24 05:56:52 +0800 CST

评论数:27条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看