使用EF后面的两个连接过滤实体,而不将整个表放入数据模型中

时间:2013-02-28 09:17:46

标签: c# sql entity-framework

考虑以下情况,我有三个表

LampPost, columns: Id (PK, int), StreetId (FK, int)
Street,   columns: Id (PK, int), CityId (FK, int)
City,     columns: Id (PK, int), Name (varchar)

通常的情况是每个城市有很多(数万)LampPosts。假设我正在创建一个LampPost管理系统,我希望能够按城市过滤LampPosts。但我所知道的关于表City的是它包含上面列出的两列。在一台服务器上,它可能有其他列,我不关心。桌子街也是如此。

目前我拥有数据模型中的所有表格,它允许context.LampPosts.Where(lp => lp.Street.City.Name == "Paris")之类的查询,但我真的想要另一种方法来实现这一点,而不需要在整个表格中使用。

我还尝试将表添加到我的数据模型中(我首先使用数据库,在.NET 4.0上使用EF 5)并删除不必要的列,但EF抱怨未映射的列。

我很确定这可以通过存储过程或某种executequery -calls来完成,但我对这两者都非常不熟悉,所以我问你们,最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

一种方法是为表创建视图并仅选择所需的列。然后,您可以将视图带入数据模型。

例如,如果你的City talbe看起来像:

City (Id, Name, State, Population, Area)

您可以像这样创建一个视图:

CREATE VIEW CityView AS
SELECT Id, Name FROM City

如果Street看起来像这样:

Street (Id, Name, CityId, Length, Width)

(这些列仅用于反量词)

您可以创建它的视图,如:

CREATE VIEW StreetView AS
SELECT Id, Name, CityId FROM Street

可以在实体之间导航所有必需的列。