Breeze **扩展**与EntityFramework **包含**以便急切加载导航属性

时间:2017-05-04 11:09:30

标签: javascript c# entity-framework breeze navigation-properties

a)为了在服务器端加载具有EntityFramework的实体的导航属性,我可以使用 include

public virtual IQueryable<TEntity> All(){
  IQueryable<TEntity> initialQuery = Context.Set<TEntity>();
  IQueryable<TEntity> extendedQuery = initialQuery.Include('MyNavigationProperty');
  return extendedQuery;
}

另见https://msdn.microsoft.com/en-us/magazine/hh205756.aspx

b)Breeze允许使​​用展开客户端端加载导航属性:

var navQuery = breeze.EntityQuery.from('MyEntity')  
    .expand('MyNavigationProperty');

另见https://breeze.github.io/doc-js/navigation-properties.html

=&GT;如果我想加载导航属性,我应该使用这两个选项吗?如果没有,在服务器端或客户端定义急切加载的导航属性有哪些优缺点?在选择其中一个选项时,我是否需要考虑性能或安全问题?

例如,是否可以破解客户端代码以检索比原始代码加载更多的导航属性?

这里有人说使用include或expand就足够了:

Breeze does not expand a navigation property

但是,我仍然不确定如何/何时使用它们。

1 个答案:

答案 0 :(得分:0)

似乎是这样的(如果你愿意,请更正或添加更多信息):

a)默认情况下启用Breeze .expand选项。为了禁用或限制它,可以在域控制器中应用注释 EnableBreezeQuery

[HttpGet]
[AllowAnonymous]
[EnableBreezeQuery(MaxExpansionDepth = 0)]
public IQueryable<Network> NetworkForEntryPageBy()
{
  return _unitOfWork.NetworkRepository.All();
}

这将禁止客户端使用breeze扩展。

另见

https://github.com/Breeze/breeze.server.net/issues/12

https://github.com/Breeze/breeze.server.net/blob/master/Tests/Test.WebApi2.EF6/Controllers/NorthwindIBModelController.cs

https://github.com/IdeaBlade/Breeze/pull/35

b)如果启用了breeze expand,则可以使用它覆盖服务器端包含。我在服务器端包含了例如“图片”导航属性,并在客户端扩展了“公司”导航属性。我首先预计两个导航属性都可用。但是,只有“公司”列表填写在客户端:

    [HttpGet]
    [AllowAnonymous]
    [EnableBreezeQuery(MaxExpansionDepth = 10)]
    public IQueryable<Network> NetworkForEntryPageBy()
    {
      return _unitOfWork.NetworkRepository.All().Include('Pictures');
    }
self.networksForEntryPage = function () {
        var query = breeze.EntityQuery
          .from(routeconfig.networksForEntryPageUrl).expand('Companies');
        return self.executeQuery(query);
      };

=&GT;图片是空的 =&GT;公司不是空的,可以被客户使用。