Entity framework 如何在Entity Framework 6中创建对象视图?

Entity framework 如何在Entity Framework 6中创建对象视图?,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,让我们假设下表: 表a 表B TableAToTableB 那么假设我想要这样一个视图来绑定显示: 在实体框架中,检索这样的视图最简单的方法是什么?在实体框架中,很容易说返回的每一行仍然是TableA对象?这也应该只在一个查询中返回到数据库 基本上,我只想返回一个带有额外列的TableA对象,用于显示,但在内部,它仍然应该像TableA对象一样被访问。希望这是有道理的 我一直在为Entity Framework如何以高效且易于管理的方式处理多个对象的复杂视图而苦苦挣扎。如果TableB中

让我们假设下表:

表a

表B

TableAToTableB

那么假设我想要这样一个视图来绑定显示:

在实体框架中,检索这样的视图最简单的方法是什么?在实体框架中,很容易说返回的每一行仍然是TableA对象?这也应该只在一个查询中返回到数据库

基本上,我只想返回一个带有额外列的TableA对象,用于显示,但在内部,它仍然应该像TableA对象一样被访问。希望这是有道理的


我一直在为Entity Framework如何以高效且易于管理的方式处理多个对象的复杂视图而苦苦挣扎。

如果TableB中有多行与TableA匹配,那么视图的唯一键是什么?实体框架要求您有一个唯一的键,但当您像这里这样进行连接时,这实际上是不可能的。在EF中实现这一点的“最简单”方法是根本不做。您可以很容易地编写一个可重复使用的查询来提取这些结果。@Dismissible该视图将TableAId视为唯一的,因为它只是TableA中每行TableB中有多少行的视图。如果我不想让数据库对象(sp或视图)执行此操作,那么如何在EF中执行此操作?使用
实体框架
最简单的方法是永远不要使用keywork
join
。看看
.Include(表达式)
单子。否则你会想具体化这些模型,我想我不认为把它作为一个实体而不是一个可以执行的查询有什么好处。
TableAId int, PK, non-null
Name     varchar(50), non-null
TableBId int, PK, non-null
Name     varchar(50), non-null
TableAToTableBId int, PK, non-null
TableAId         int, FK, non-null
TableBId         int, FK, non-null
SELECT a.TableAId, 
       a.Name,
       COUNT(*) AS CountOfTableAToTableBId
FROM   TableA a 
    INNER JOIN 
       TableAToTableB ab 
    ON a.TableAId = ab.TableAId
GROUP BY a.TableAId, a.Name