1

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

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

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

目前我的数据模型中有所有表,它允许查询context.LampPosts.Where(lp => lp.Street.City.Name == "Paris"),但我真的很想有另一种方法来完成这个,而不是在整个表中。

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

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

4

1 回答 1

1

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

例如,如果您的Citytalbe 看起来像:

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

在实体之间导航所需的所有列均可用。

于 2013-02-28T09:21:31.097 回答