1 / 4
文档名称:

抛弃EF,20分构建一个属于自己的ORM框架(下).doc

格式:doc   大小:13KB   页数:4页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

抛弃EF,20分构建一个属于自己的ORM框架(下).doc

上传人:好用的文档 2021/10/23 文件大小:13 KB

下载得到文件列表

抛弃EF,20分构建一个属于自己的ORM框架(下).doc

相关文档

文档介绍

文档介绍:抛弃EF,20分构建一个属于自己的ORM框架(下)
static void Main(string[] args) { string[] Names = { 'Andy', 'Amy', 'Mike' }; Expressionbool>> func = x => (!() & ( == 'A' || () > 5)); ResolveExpress resolve = new ResolveExpress(); (func); (); foreach (var item in ) { ( + ':' + ); } (); }
结果:这里有几个重要的东西要给大家讲下
string[] Names={“Andy”,”Amy”,”Mike”};
1.)x => ();
2.)x => ()==false;
3.)x => !();
这3种在Expression中的表现都不一样
1的话会看成是一个静态方法(MethodCallExpression)
2的话会看成是一个2元运算(BinaryExpression)
3的话会看成是一个1元运算(UnaryExpression)
所以我们都要支持,处理都有所不同。
还有
x=>
string name=”123″;
x=>==name;

x=>==”123″
的处理也不一样。大家可以在例子中细细的看看。
这样的构造使得我们切换数据库变得非常简单。因为我们程序中的查询都是基于lambda。换了数据库只要添加一个对应的lamdba转数据库查询条件的实现就可以了。写得够多了。至于数据层怎么封装,到了这一步它已经变得没什么难度了。希望大家能从文章中有所启发和帮助
下篇文章将结合解析Expression和IQueryable来实现延迟加载
补充点东西
IEnumerable和IQueryable有什么不同?
为什么EF查询后返回的是IQueryable而不是IEnumerable。我们对着IQueryableF12去看看。啥都没,就继承了几个接口。鼠标移到IQueryable上。F12IQueryable中有3个属性。
Type是类型。
Expresstion是表达式。
那IQueryProvider是什么?
再看看IQueryProvider接口的定义。
CreateQuery是创建查询条件
Ex