加入和取消收藏 - EF两个TVF模型

时间:2014-11-03 16:32:34

标签: c# sql-server linq entity-framework odata

我正在发布OData服务。我有两个需要暴露给OData端点的模型。我已经抽象了我的模型,以便于在下面显示博客/帖子模型。当两者都存储在DB中的视图中时,此服务很有效。在这种情况下,当有人使用$ expand来包含Posts属性时,表会自动加入和取消。我使用EF的Include方法急切地加载帖子。

现在,我的DBA希望使用Table Valued Functions来访问这两个集合,以便根据查询用户应用权限筛选。界面将是这样的:

IQueryable<Blog> Blogs(int userId);
IQueryable<Post> Posts(int userId);

我可以单独访问这些内容,甚至可以将一个View加入TVF,但问题是,当他们都被TVF支持时,我不能再使用EF的Include方法来热切地填充Posts集合。

问题:我需要能够查询(加入)这两个集合,并将结果集重新组合(取消)成为包含Posts集合的Blogs。解决方案还需要避免使用N+1 Selects Issue

我意识到EF的使用并不常见,但有没有人遇到过这个问题?有没有办法使用Linq to Entities,Automapper,Store Functions或任何其他方式来做到这一点?

我正在使用带有EF Code First的Web API,Automapper的Queryable ExtensionsStore Functions库来启用EF查询中的TVF。

public class Blog 
{
  public Blog()
  {
    Posts = new HashSet<Post>();
  }
  public int Id { get; set; }
  public string Name { get; set; }
  public virtual ICollection<Post> Posts { get; set; }
}

public class Post
{
  public int Id { get; set; }
  public int BlogId { get; set; }
  public string Title { get; set; }
  public string Content { get; set; }

  public virtual Blog Blog { get; set; }
}

0 个答案:

没有答案