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
但是,我仍然不确定如何/何时使用它们。
答案 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/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;公司不是空的,可以被客户使用。