完善主體資料,免費贈送VIP會員!
      * 主體類型
      * 企業名稱
      * 信用代碼
      * 所在行業
      * 企業規模
      * 所在職位
      * 姓名
      * 所在行業
      * 學歷
      * 工作性質
      請先選擇行業
      您還可以選擇以下福利:
      行業福利,領完即止!

      下載app免費領取會員

      NULL

      ad.jpg

      二次開發教程:Dapper里使用Attribute自定義映射關系

      發布于:2019-07-24 16:32:10

      網友投稿

      更多

      目的將book表中的id,name,price 映射到Book類中的Id1,Name1,Price1


          class Program

          {        

              static SQLiteConnection conn;

              static string dbStr = "test.db";

              static void Main(string[] args)

              {

                  SqlMapper.SetTypeMap(typeof(Book), new CustomTypeMap<Book>());//定義映射規則

                  SQLiteConnection.CreateFile(dbStr);

                  conn = new SQLiteConnection($"Data Source={dbStr};Version=3;");

                  string sql = "create table book (id int,name varchar(20), price double)";         

       

                  conn.Execute(sql);

                  sql = "insert into book values(@id1,@name1,@price1)";

                  conn.Execute(sql, new Book());

       

                  sql = "select * from book";

                  var books = conn.Query<Book>(sql);

       

                  Console.ReadLine();

              }

          }

       

          public class Book

          {

              [Column("name")]

              public string Name1 { get; set; }

              [Column("id")]

              public int Id1 { get; set; }

              [Column("price")]

              public double Price1 { get; set; }

          }

       

          public class CustomTypeMap<T> : SqlMapper.ITypeMap

          {

              public ConstructorInfo FindConstructor(string[] names, Type[] types)

              {

                  return null;

              }

       

              public ConstructorInfo FindExplicitConstructor()

              {

                  return typeof(Book).GetConstructor(new Type[0]);

              }

       

              public SqlMapper.IMemberMap GetConstructorParameter(ConstructorInfo constructor, string columnName)

              {

                  return null;

              }

       

              public SqlMapper.IMemberMap GetMember(string columnName)

              {

                  return new CustomMemberMap(columnName, _dict[columnName]);

              }

       

              private Dictionary<string, PropertyInfo> _dict = new Dictionary<string, PropertyInfo>();

              public CustomTypeMap()

              {

                  Type type = typeof(T);

                  var ps = type.GetProperties();

                  foreach (var p in ps)

                  {

                      var at = p.GetCustomAttribute<ColumnAttribute>();

                      if (at != null)

                      {

                          if (!string.IsNullOrWhiteSpace(at.ColumnName))

                              _dict.Add(at.ColumnName, p);

                      }

                  }

              }

          }

          [AttributeUsage(AttributeTargets.Property)]

          public class ColumnAttribute : Attribute

          {

              public string ColumnName { get; }

              public ColumnAttribute(string columnName)

              {

                  ColumnName = columnName;

              }

          }

       

          public class CustomMemberMap : SqlMapper.IMemberMap

          {

              public CustomMemberMap(string column,PropertyInfo propertyInfo)

              {

                  ColumnName = column;

                  Property = propertyInfo;

              }

              public string ColumnName { get; }

       

              public Type MemberType => Field?.FieldType ?? Property?.PropertyType ?? Parameter?.ParameterType;

       

              public PropertyInfo Property { get; }

       

              public FieldInfo Field { get; }

       

              public ParameterInfo Parameter { get; }

          }

      本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

      未標題-1.jpg

      上一篇:二次開發教程:Hello entity framework

      下一篇:二次開發教程:orm 里使用Emit

      主站蜘蛛池模板: 一夲道无码人妻精品一区二区 | 日本一区二区在线免费观看| 国产成人一区二区三区免费视频 | 国产精品无码一区二区三区电影| 亚洲天堂一区在线| 日韩精品无码一区二区视频| 亚洲av无一区二区三区| 日韩精品一区二区三区中文| 亚洲一区二区三区无码中文字幕| 偷拍精品视频一区二区三区| 国产伦精品一区二区三区免费迷| 亚洲国产精品综合一区在线| 亚洲天堂一区二区| 久久国产免费一区| 久久久一区二区三区| 高清一区二区三区日本久| 丝袜无码一区二区三区| 成人国内精品久久久久一区| 中文字幕不卡一区| 无人码一区二区三区视频| 精品日本一区二区三区在线观看| 亚洲av成人一区二区三区在线观看| 在线观看国产一区亚洲bd| 日本精品3d动漫一区二区| 日本一区二区三区四区视频| 国产在线精品观看一区| 精品乱码一区二区三区在线| 日韩一区二区精品观看| 日韩经典精品无码一区| 国产在线观看一区精品| 中文字幕一区日韩在线视频 | 国产在线乱子伦一区二区| 一区二区无码免费视频网站| 亚洲av无码成人影院一区| 日本精品一区二区在线播放| 亚洲一区二区视频在线观看 | 鲁丝丝国产一区二区| 深夜福利一区二区| 国产在线一区二区三区| 亚洲熟妇av一区| 国产精品日韩一区二区三区|