以前喜欢DataTable,觉得它通用性强,只要一条SQL语句就可以自动映射出所有的列;相比之下,实体类必须提前创建好,映射的时候又太死,还绕了个圈不直接。
现在能力提高了,终于发现了实体类的优势,那是DataTable远远不能相比的,只不过目前有一个自己写的项目还没完成,是基于DataTable的,还不能立刻使用实体类,真的可惜。
特别说明:我要说的实体类,绝对不是EF等现有的ORM框架,我根本没看过那些框架,我仅从自己的经验得出实体类的强势,并加以改良,我敢说,现有的著名框架都没达到我这个程度。
先说说DataTable的局限性,它的灵活性带来的一个最大的问题就是:开发通用模块不方便。在数据库编程中,通用模块往往需要强类型的传递,弱类型如果因为内部列有变化,会导致调用模块出错,达不到预期效果。
再说说实体类的强势,传统的实体类是强类型的,但是有一种动态实体类的概念,让实体类支持弱类型,这样实体类就把DataTable所能处理的功能都包含了,剩下的事就是设计者怎么设计这个动态实体类和强名实体类的结合使用了,现有ORM框架都不支持动态实体类,这也是我断言我设计思路的先进性。
下面简单说下动态实体类的技术点,灵感来自Dapper(仅限.NET4.0以上版本,低版本需要改造)
这个是Dapper中定义的一个动态类型,也可以使用微软提供的ExpandoObject类,效果类似:
}