0

如果我有以下IQueryable<T>存储库:

public class OrderRepository : GenericRepository<Order>, IOrderRepository
{
   public IQueryable<Order> Find()
   {
       return Context.CurrentEntitySet;
   }
}

我像这样使用它来获得特定的订单:

var order = orderRepository.Find().SingleOrDefault(x => x.OrderId == 1);

一切皆好。

现在,我有一个名为OrderDetailsView的 SQL Server 2008 视图,我已将其添加到我的 EDMX 中。它有一个我想加入的名为OrderId的字段。这是OrderOrderDetailsView之间的1-1

我想返回一个特定的订单,以及相应的 OrderDetailsView 记录。

我不确定这里的正确方法是什么。

  • 我可以在我的 Order 实体上拥有 View 的导航属性吗?我可以添加关联——但设计师抱怨它没有被映射——我假设它需要一个 FK,但显然视图不能有 FK。

  • 我需要做一个明确的加入吗?如果是这样,这意味着它们是没有关联的独立实体,所以我需要另一个存储库 - 而且我需要两个数据库调用,因为您不能跨两个存储库执行 JOIN。

理想情况下,我想这样做:

return ctx.Orders.Include("OrderDetailsView").SingleOrDefault();

但如前所述,我不知道是否可以添加指向视图的导航属性。

有任何想法吗?

4

1 回答 1

0

明白了 - 我需要添加一个引用约束(因为没有 FK):

替代文字

现在我可以像任何其他导航一样急切地加载视图。

好吧,这比我想象的要容易!:)

于 2011-01-06T23:45:43.040 回答