c# DataTable、IReader与List<T>互转 emit方法

阅读: 评论:0

c# DataTable、IReader与List<T>互转 emit方法

c# DataTable、IReader与List<T>互转 emit方法

网上有很多ORM框架和数据库转换方法。

c#由EF控制,但是大家知道的是影响效率和底层控制。

因此最近几个月一直在研究。最后使用Emit实现了转换。

  最新增加了(修复)对实体的可空类型的支持。

需要说明的是,以前我被骗了,没有怎么研究过,只是会使用可空类型,但是为了实现转换,支持可空类型,在研究emit是才知道,给可空类型赋值实际是有一个转换的。例如:

  int? a=4;

该语句实际是Nullable<int> a=new Nullable<int>();所以是有一个初始化的过程和分配过程,也许比类要好点。

但是在执行emit时发现还是会影响性能速度,虽然很小,几乎不会知道。因此在与数据库转换时,尤其是你需要高速转换时,不要使用可空类型。

使用说明:

1.采用emit方法DataTable,IDataReader与实体相互转换。

2.DataTable,IDataReader转换实体: ToEntityList扩展方法

3.实体转换DataTable: FromEntityToTable扩展方法

4.如果实体转换DataTable带有特性: FromEntityToTableAttribute扩展方法

设计了三类特性ColumnType(列类型映射),DataField(列名称映射),NoColumn(没有对应的列,忽略该属性。


DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("DTO", typeof(string));
dt.Rows.Add(1, "3e-6");
dt.Rows.Add(2, "5000");List<Person> lst=  dt.ToEntityList<Person>(); //转model  DataTable dd=  lst.FromEntityToTable();//转回DataTable  IDataReader idr = null;
List lstm= idr.ToEntityList(); //转model DataTable dds= lstm.FromEntityToTableAttribute(); //转回DataTable 定义:
public class Person
{
public int Id { get; set; }[ColumnType(typeof(double))]  public decimal? DTO { get; set; }  [DataField("user")]  public string Name { get; set; }  
}  

如果程序报错:没有找到列,则说明你使用了不同的数据转model,但是这些数据不一样。这时你可以使用重载方法,定一个唯一key

项目地址:

.git

已经提交nuget,名称:EntityMappingDB

本文发布于:2024-01-29 05:45:10,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170647831513121.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:方法   IReader   DataTable   List   emit
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23