Entity Framework是.net3.5 sp1中的一个ORM工具,有着使用方便,和Linq结合紧密的优点,但是在实际使用中,它仍然拥有很多缺点,最近在用Entity Framewok做项目的时候感受良多,
今天仅仅记录下EntityFramework在Select上的一些局限
在基于Entity Framework的项目中,由于entity实体严重充血,我们往往都会使用Repository模式对之进行转换,然而,在Repository中对实体进行转换的时候也发现了很多问题.
在linq2sql中,我们也采用Repository模式,这时我们经常采用的转换方式为:
from a in Context
select convertEntity(a);
select convertEntity(a);
定义一个convertEntity的方法,就可以轻松将a转化成其他实体对象,然而,在entity framework中是行不通的,它无法支持这种查询,查找资料可知,linq to entites只能支持对象的初始化赋值.
因此,上面的代码可能需要改成:
from a in Context
select new b{
xxx=a.xxx,
yyy=a.yyy
}
select new b{
xxx=a.xxx,
yyy=a.yyy
}
便捷性大大降低,唯一的选择就只能是将构造表达式树然后Select,然而,这样也会出现一些问题,linq to entities能支持的初始化赋值仅仅是简单对象,对于关联的实体赋值转换确是无能为力.