实体框架投影

5
我们正在调查实体框架,以确定它是否符合我们的特定需求。这是我感兴趣的场景:
我有一张大表(让我们称之为VeryWideRecord),它有许多列,并且有一个相应的业务对象(也称为VeryWideRecord)。 我想能够查询数据库以获取一个VeryWideRecord业务对象,但是只有底层SQL返回某些列的值。 使用实体框架可以实现吗?
我不确定实体框架的表拆分功能是否能够做到这一点,因为应用程序需要能够在运行时更改请求的列。 这样做的原因是我们试图将通过网络传输的信息量最小化。
我知道如何使用NHibernate进行操作(example),但是如何使用实体框架呢?
2个回答

0

链接已失效,请考虑更新。 - Restuta

0

类似这样(在VB.NET中:

Dim pl As New List(Of VeryWideRecord)(
     (From p In db.VeryWideRecords 
      Select New With {.RecID = p.RecID}
     ).ToList().Select(
       Function(r)
         Return New VeryWideRecord With {.RecID = r.RecID}
       End Function))

有了这个,你可以进行一些编译时检查。但是如果你想要真正动态地做到这一点,eSQL或许更适合。 而且,它并不是实体框架,而是Lambda表达式起到了关键作用。


我本来也想像你一样建议使用投影,但问题说明请求的列将在运行时而不是编译时确定。另外,FYI,您可以让EF完成投影的工作,只是不要调用ToList(),并且投影应返回匿名类型。需要注意的是,在由EF处理的投影中,您所能做的有限制(通常无法在投影中调用函数)。如果要在没有EF的情况下进行投影,则使用AsEnumerable()ToList()更好。 - Brian Ball
同意,使用AsEnumerable()会更好,但这只是一个示例,用于展示创建记录的lambda部分。至于返回匿名类型,那就不是他想要的。 - MarcelDevG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接