标签: breeze

MaxExpansionDepth带有最新的webapi和微风

我最近更新了所有我的nuget软件包到最新的EF6,breeze 1.4.5,system.web.http.odata 5.0.0.0,以及所有其他可用的好位.

现在,如果一个查询包含像xyz这样的扩展,我会收到如下错误:

A first chance exception of type 'Microsoft.Data.OData.ODataException' occurred in System.Web.Http.OData.dll

Additional information: The request includes a $expand path which is too deep. The maximum depth allowed is 2. To increase the limit, set the 'MaxExpansionDepth' property on QueryableAttribute or ODataValidationSettings.
Run Code Online (Sandbox Code Playgroud)

我查看了建议的修复程序.如果我在查询的breeze'端点'上添加Queryable属性,它似乎会导致各种其他问题.我的猜测是它会干扰微风的预期行为,并以不同的方式格式化结果.

然后,我通过GlobalConfiguration.Configuration ...查看了使用HttpConfiguration EnableQuerySupport扩展方法,但似乎没有效果(请参阅支持OData查询选项)

有没有人知道如何更改默认的webapi行为?

谢谢.

odata asp.net-web-api breeze

8
推荐指数
1
解决办法
3605
查看次数

为什么我必须调用NgZone.run来查看使用breezejs在Angular2中更新?

我正在尝试学习angular2并使用odata webapi后端创建了一个测试应用程序.在应用程序中,我有一个视图,它获取一个项目数组,我想在我的视图中显示这些.

为了从前端获取数据我正在使用breezejs库,因为它已经证明在过去节省了我很多时间,我喜欢将它与odata后端一起使用.

调用树和应用程序结构如下所示:

通过从视图中调用服务函数开始调用以开始获取项目(请注意,我将从每次调用返回es-6承诺):

this._scrumModuleService.fetchActiveSessions().then((sessions: ScrumSession[]) => {
    // Here i have to call zone.run else my view wont update.
    this._zone.run(() => {
        this.sessions = sessions;
    });
}).catch((error: any) => {
     debugger;
});
Run Code Online (Sandbox Code Playgroud)

然后从视图中它将转到服务,该服务又调用存储库:

public fetchActiveSessions(): Promise<ScrumSession[]> {
    return this._scrumSessionRepository.fetchActiveSessions();
}
Run Code Online (Sandbox Code Playgroud)

存储库获取功能:

public fetchActiveSessions(): Promise<ScrumSession[]> {
    return this._dataContext.fetch(new breeze.EntityQuery().from("ScrumSessions").expand(['creator', 'scrumRoom','productOwner', 'users']));
}
Run Code Online (Sandbox Code Playgroud)

然后最终存储库调用(通用)datacontext,它将使用breeze entitymanager执行查询:

public fetch(query: breeze.EntityQuery, isRetry: boolean = false): Promise<any> {

    return new Promise((resolve, reject) => {
            this.entityManager.executeQuery(query).then((result: breeze.QueryResult): void => {
            // Data has been fetched, …
Run Code Online (Sandbox Code Playgroud)

promise typescript breeze ecmascript-6 angular

8
推荐指数
2
解决办法
4221
查看次数

BreezeJS和RequireJS没有按预期工作

我正在将breezeJS集成到已经使用knockoutJS的现有requireJS项目中.我遇到了几个问题.

第一个是breeze无法加载Q库,除非我将它作为<script>标记包含在我的html包装器上,而不是作为加载的AMD依赖项.在我的项目中,我试图将我的代码保持为单个脚本标记,所以这不是理想的.

第二个问题是breezeJS无法加载淘汰赛.在我的main.js中,我已经为淘汰定义了一条路径:

knockout: '../libs/knockout/knockout-2.2.0',

(我这样做是因为我喜欢肯定我没有访问全局ko)

然而,当我为我的项目添加微风时,微风无法加载我的淘汰库.查看微风代码,我可以看到它已被硬编码加载淘汰库ko.

不想改变我的所有代码我发现我可以将我的AMD加载的淘汰库添加到全局窗口对象中window['ko'].但这感觉就像一个小屋.还奇怪地以这种方式添加Q并删除<script>标签不起作用,因为我认为Q在应用程序的生命周期中需要太早,甚至在我污染全局之前 - 我确实require()在main.js中嵌套我的调用但是隐藏了我的大部分应用程序文件来自构建过程,所以我放弃了这种方法.

我如何在我的项目中包含Q和knockout和breeze,并且仍然使用单行<script>标记,目前我不得不将Q作为单独的<script>标记包含并且污染全局以获得微风和淘汰赛以便很好地发挥作用.

我在我的项目中使用了很多其他库,但没有一个难以集成.

任何帮助深表感谢

干杯

GAV

编辑:这是我的完整需求配置:

require.config({
    /**
    * shims are for 3rd party libraries that have not been written in AMD format.
    * shims define AMD modules definitions that get created at runtime.
    */
    shim: {
        'jqueryUI': { deps: ['jquery'] },
        'jqueryAnimateEnhanced': { deps: ['jqueryUI'] },
        'jqueryScrollTo': { deps: ['jquery'] },
        'touchPunch': { …
Run Code Online (Sandbox Code Playgroud)

javascript amd requirejs knockout.js breeze

7
推荐指数
1
解决办法
1937
查看次数

如何在SPA HotTowel模板中设置登录视图(用户身份验证)?

VS2012 MVC4中的某些单页面应用程序(SPA)模板具有内置身份验证.HotTowel SPA模板没有.

在SPA HotTowel中实现用户身份验证(登录屏幕)的正确方法是什么?HotTowel使用Durandal JS,所以我想问题是如何使用Durandal JS实现用户身份验证

asp.net-mvc-4 single-page-application breeze durandal hottowel

7
推荐指数
2
解决办法
6891
查看次数

从代码首次生成的实体中忽略属性

是否有.Net属性会告诉Breeze完全忽略属性?

我知道保护财产是一种隐藏Breeze的方法并阻止它的序列化,但如果我希望保留它public呢?

breeze

7
推荐指数
2
解决办法
2690
查看次数

validationOptions不使用自定义bindingHandlers

我正在使用带有Knockout的durandal/breeze.

我正在努力验证我的输入ko.validation.

这是一个经典:

<input type="text" data-bind="value: myDate, validationOptions: { errorElementClass: 'input-validation-error'}" />

.input-validation-error {
    background-color: #c75b55 !important;
}
Run Code Online (Sandbox Code Playgroud)

这个工作得很好:当验证失败时,输入文本框标记为红色.

现在我想使用bindingHandlers代替'简单' value绑定:

<input type="text" data-bind="dateRW: myDate, validationOptions: { errorElementClass: 'input-validation-error'}" />

ko.bindingHandlers.dateRW = {
    //dateRW --> the 'read-write' version used both for displaying & updating dates
    init: function (element, valueAccessor, allBindingsAccessor) {
        var observable = valueAccessor();            
        //handle the field changing
        ko.utils.registerEventHandler(element, "change", function () {
            var value = $(element).val();
            var dateFormatted = moment.utc(value, "DD/MM/YYYY");
            //if (dateFormatted.isValid())
            if (dateFormatted) …
Run Code Online (Sandbox Code Playgroud)

knockout.js breeze

7
推荐指数
1
解决办法
3031
查看次数

Hot Towel/Durandal/Breeze.js:如何垂直保护数据通话?

我是整个客户端SPA世界的新手.我正在使用上述技术,这似乎很有前途.然而,一个我无法轻易克服的巨大障碍是缺乏内置安全性.我不得不手动推出用户授权,恕我直言应该是框架的一部分.

现在我已对其进行了排序,我对垂直安全性感到头疼:一个用户登录但可以通过更改浏览器控制台中的一些参数轻松访问其他用户的信息.我可以在每次调用时传递userId,然后将其与服务器上的那个进行比较,但我希望有一个总体解决方案,不会污染用户ID的微风数据调用.

例如,假设有一个来自数据服务的调用,如下所示:

function getItems(){        
         var query = breeze.EntityQuery.from('Items').expand("Person");
         return manager.executeQuery(query);
}
Run Code Online (Sandbox Code Playgroud)

这将得到所有项目,不好.所以让我们限制userId:

function getItems(userId){        
         var query = breeze.EntityQuery.from('Items').where("userId", "==", authentication.userId).expand("Person");
         return manager.executeQuery(query);
}
Run Code Online (Sandbox Code Playgroud)

在第二个示例中,我们从身份验证服务获取userId,该服务在用户登录时存储userId.但是,恶意用户可以轻松访问浏览器控制台并更改该值.

当然,我可以使用withParameters(...)传递userId并将其与服务器上的当前版本进行比较,但我必须为每次调用执行此操作,这似乎不正确.有没有更好的方法来保护可信用户ID的呼叫?

asp.net-web-api breeze durandal hottowel

7
推荐指数
1
解决办法
3567
查看次数

breezejs:覆盖displayname

我正在定制验证消息.它使用messageTemplates属性工作正常.但是它使用%displayName%来呈现属性的名称,我无法找到如何覆盖此值?反正有吗?

breeze

7
推荐指数
2
解决办法
1277
查看次数

包括未映射到实体框架实体的服务器端属性

我们正在向我们未在数据库中跟踪的服务器上的对象添加其他属性.数据返回给客户端,但是由breeze实现的对象没有将其作为属性.我们如何向我们返回breeze的对象添加属性,但是不将它们映射到我们存储数据的数据库中?

示例:窗口小部件类属性A - 映射到数据库属性B - 具有[NotMapped]属性,以便它不存储在数据库中.它由服务器即时计算.

当我们在客户端获取对象时,我们得到:Widget Class = {Property A:ko.observable(A的值)}

物业B遗失.

当我们查看服务器返回的json时,我们看到:

小部件类= {属性A:A的值,属性B:B的值}

breeze

7
推荐指数
1
解决办法
2075
查看次数

在一对多关系中删除实体的正确方法

我有亲子关系(一对多).我能够创建子项,但删除失败.我创建了一个孩子,保存它,但是当我删除时,我得到:

A foreign key value cannot be inserted because a corresponding primary key value 
does not exist. [ Foreign key constraint name = FK_dbo.Children_dbo.Parents_ParentId ]
Run Code Online (Sandbox Code Playgroud)

我注意到当删除被发送到服务器时,孩子的parentid为0,实体状态为"modified".我希望这会被"删除".

相关视图模型部分:

function queryFailed(error) {
  console.log('Query failed: ' + error.message);
}
function save() {
  dataservice.saveChanges().fail(queryFailed);
}
function deleteChild(child) {
  parent().children.remove(child);
}
function addChild() {
  dataservice.createChild(parent);
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<section data-bind="with: parent">
  <div data-bind="foreach: children">
    <div>
      <select name="propertyOne" 
        data-bind="options: propertyOneOptions, value: propertyOne, optionsText: 'description', optionsCaption: 'Select a Property'">
      </select>
      <button data-bind="click: $root.deleteChild">Delete Child</button>
    </div>
  </div>
  <button data-bind="click: …
Run Code Online (Sandbox Code Playgroud)

javascript entity-framework breeze

7
推荐指数
1
解决办法
3740
查看次数