考虑以下情况,我有三个表
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来完成,但我对这两者都非常不熟悉,所以我问你们,最好的方法是什么?
答案 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
可以在实体之间导航所有必需的列。