java吧 关注:1,250,073贴子:12,732,439
  • 29回复贴,共1

动态处理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);
搞定经测试有效


IP属地:湖北1楼2017-06-12 22:30回复
    我来暖个贴,好久不见!


    IP属地:法国2楼2017-06-22 06:09
    收起回复
      请问楼主 如果是导航属性 用这个方法会报错
      Cannot call Property for the property 'User' on entity type 'Account' because it is configured as a navigation property. Property can only be used to configure scalar properties.
      该如何解决呢?


      IP属地:四川6楼2017-08-08 12:00
      收起回复
        爪哇吧里的一股清流


        IP属地:广东来自Android客户端7楼2017-08-08 12:37
        回复
          司马不是吧主了么


          9楼2017-10-19 12:00
          回复


            IP属地:广东10楼2017-10-26 10:21
            回复
              这个重写在EF中很重要的,顶一个


              12楼2018-01-31 11:20
              收起回复
                这不就是c#中的反射吗?这个吧里很多人连java反射都搞不懂


                IP属地:四川来自Android客户端13楼2018-01-31 11:25
                回复
                  亲爱的贴吧用户你好,我是百度贴吧大神外宣,我对你的帖子及水平很满意。如果你有兴趣,我将会尽我所能帮助你走向大神之路。百度贴吧大神拥有红名和神贴特权,想必你已经很清楚了。想申请私聊我或者联系我26.8741.9.828(防止屏蔽),相信你会成功!


                  IP属地:江苏来自Android客户端20楼2019-01-31 22:29
                  回复
                    准备自学Java语言编程,求吧里的哥哥姐姐们推荐一款笔记本电脑来练习。


                    IP属地:广东来自Android客户端22楼2020-04-27 09:50
                    收起回复
                      import java.awt.BorderLayout;
                      import java.awt.GridLayout;
                      import java.awt.Panel;
                      import java.awt.event.ActionEvent;
                      import java.awt.event.ActionListener;
                      import javax.swing.JButton;
                      import javax.swing.JFrame;
                      import javax.swing.JTextField;
                      public class Calculator {
                      JFrame jf = new JFrame("计算器");
                      Panel p = new Panel();
                      JTextField jtf = new JTextField();
                      JButton yi = new JButton("1");
                      JButton er = new JButton"2");
                      JButton san = new JButton("3");
                      JButton si = new JButton("4");
                      JButton wu = new JButton("5");
                      JButton liu = new JButton("6");
                      JButton qi = new JButton("7");
                      JButton ba = new JButton("8");
                      JButton jiu = new JButton("9");
                      JButton ling = new JButton("0");
                      JButton cheng = new JButton("*");
                      JButton chu = new JButton("/");
                      JButton jia = new JButton("+");
                      JButton jian = new JButton("-");
                      JButton qingchu = new JButton("c");
                      JButton dengyu = new JButton("=");
                      class A implements ActionListener{
                      @Override
                      public void actionPerformed(ActionEvent arg0) {
                      // TODO Auto-generated method stub
                      String s1 = arg0.getActionCommand();
                      jtf.setText(s1);
                      }
                      }
                      void init(){
                      A a= new A(); //创建监听器对象a
                      yi.addActionListener(a);
                      er.addActionListener(a);
                      san.addActionListener(a);
                      si.addActionListener(a);
                      wu.addActionListener(a);
                      liu.addActionListener(a);
                      qi.addActionListener(a);
                      ba.addActionListener(a);
                      jiu.addActionListener(a);
                      ling.addActionListener(a);
                      cheng.addActionListener(a);
                      chu.addActionListener(a);
                      qingchu.addActionListener(a);
                      jia.addActionListener(a);
                      jian.addActionListener(a);
                      dengyu.addActionListener(a);
                      p.setLayout(new GridLayout(4,4));
                      jf.add(jtf);
                      p.add(yi);
                      p.add(er);
                      p.add(san);
                      p.add(si);
                      p.add(wu);
                      p.add(liu);
                      p.add(qi);
                      p.add(ba);
                      p.add(jiu);
                      p.add(ling);
                      p.add(cheng);
                      p.add(chu);
                      p.add(jia);
                      p.add(jian);
                      p.add(qingchu);
                      p.add(dengyu);
                      jf.add(p, BorderLayout.SOUTH);
                      jf.setSize(300, 300);
                      jf.setVisible(true);
                      }
                      public static void main(String[]args) {
                      new Calculator().init();
                      }
                      }


                      IP属地:广东来自Android客户端25楼2022-06-01 07:26
                      回复
                        楼主你好,可以教一下我这道题吗,界面弄出来了,加减乘除清零功能不会写


                        IP属地:广东来自Android客户端26楼2022-06-01 07:28
                        回复
                          源代码在25楼


                          IP属地:广东来自Android客户端27楼2022-06-01 07:29
                          回复