2011-02-11 71 views
5

我们正在调查实体框架以查看它是否会满足我们的特定需求。这里是我感兴趣的场景:我有一个很大的表(我们称之为VeryWideRecord),它有很多列,它有一个相应的业务对象(它也被称为VeryWideRecord)。我希望能够查询我的数据库中的VeryWideRecord业务对象,但只有基础SQL返回的某些列的值。我可以使用实体框架来做到这一点吗?实体框架预测

由于应用程序需要能够(在运行时)更改请求的列,所以我不确定这是否可以使用Entity Framework的表分割功能来完成。这是因为我们试图尽量减少通过线路传递的信息量。

我看到如何使用NHibernate(example)完成这项工作,但我该如何使用Entity Framework做到这一点?

回答

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是也许更合适 而且,它不是真正的实体框架,但拉姆达表达谁谁的伎俩。

+0

我正在建议pr像你这样做,但问题表明,所要求的列将在运行时确定,而不是编译时间。另外,仅供参考,您可以让EF完成项目的工作,您只需要调用`ToList()`并且投影应该返回一个匿名类型。应该注意的是,在EF处理的投影中你可以做什么是有限制的(你通常不能在投影中调用函数)。在执行w/o EF投影的情况下,使用`AsEnumerable()`优于`ToList()` – 2011-02-12 00:19:54