在我的edmx模型中,有2个相关的表:Challenge和ChallengeNote(已将FK返回至ChallengeID)
我可以一整天在微风中做
var qry = dataservice.getQuery("Challenges");
但是,这每次都会失败:
var qry = dataservice.getQuery("Challenges").expand("ChallengeNotes");
searchFailed被调用,并且是控制台中唯一的错误信息。
return dataservice.execute(qry.inlineCount(true))
.then(seachSucceeded)
.fail(searchFailed);
这是一个与之相关的已回答问题,但是我已经在关注(除非我错过了什么)答案的解决方案(以及为什么我的ContextProvider中有2个context.Configuration设置)。当加载带有相关数据的实体时,breezejs错误
这是另一个未解决的类似问题,微风扩展查询失败,对象对象没有方法获取属性
这是我的提供程序代码(想要在项目中进一步使用BeforeSaveEntity重写):
public class ModelProvider : EFContextProvider<ModelEntities>
{
public ModelProvider()
: base()
{
this.Context.Configuration.LazyLoadingEnabled = false;
this.Context.Configuration.ProxyCreationEnabled = false;
}
}
这是我的控制器代码:
[BreezeController]
public class DataController : ApiController
{
readonly ModelProvider _contextProvider = new ModelProvider();
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
[HttpGet]
public IQueryable<Challenge> Challenges()
{
return _contextProvider.Context.Challenges.Include(x => x.ChallengeNotes);
}
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return _contextProvider.SaveChanges(saveBundle);
}
[HttpGet]
public IQueryable<ChallengeNote> ChallengeNotes()
{
return _contextProvider.Context.ChallengeNotes;
}
}
当我浏览到URL时,它包括相关的实体: http://localhost:53644/breeze/data/Challenges?$filter=Active%20eq%20true&$top=10&$expand=ChallengeNotes&$inlinecount=allpages
这是来自控制器的数据
此时,imo一切都指向服务器或客户端上的Breeze配置。
TIA
Breeze绝对支持这一点,但是您需要确保正确设置了Entity Framework模型。请查看Breeze zip中的DocCode示例,以获取同时使用expand(客户端)或EF include(服务器端)子句的许多示例。
关于您的问题的一种猜测是您使用的是Breeze camelCasing命名约定,因此您的“ expand”子句应为
var qry = dataservice.getQuery("Challenges").expand("challengeNotes");
即“ challengeNotes”(注意大小写)是与“ ChallengeNotes”的服务器端属性相对应的客户端属性的名称。为了明确起见,“ expand”子句将客户端“属性”的名称作为参数,而属性名称是Breeze.NamingConvention的结果。
相反,示例中的查询资源名称(即“挑战”)是服务器端资源的名称(由于使用[HttpGet]批注标记了“挑战”方法。此名称不受NamingConvention的影响。
旁注:您的示例同时具有expand和Include子句。所有这些本身就足够了。您不需要两者。通常,您可以在客户端查询中包括“ expand”子句,或者在服务器上具有实体框架“ Include”子句。第一个优点是可以控制客户端上的扩展,第二个优点是可以确保对指定资源的每个查询始终获取某些相关实体。
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句