错误Breeze Odata - 元数据查询为http:// localhost:5781 / OData / $元数据

StackOverflow https://stackoverflow.com//questions/24020397

  •  21-12-2019
  •  | 
  •  

我在论坛上研究了问题,但没有找到真正的结果。

错误:

Metadata query failed for //localhost:5781/odata/$metadata; Unable to process returned 

metadata: NamingConvention for this server property name does not roundtrip 

properly:diagram_id-->Diagram_id Error: Metadata query failed for //localhost:5781/odata/$metadata; Unable to process returned metadata: NamingConvention for this server property name does not roundtrip properly:diagram_id
.

代码

(function () {
'use strict';

var serviceId = 'entityManagerFactory';
angular.module('myApp')
       .factory(serviceId, ['breeze', emFactory]);

function emFactory(breeze) {
    configureBreeze();
    var serviceRoot = window.location.protocol + '//' + window.location.host + '/';
    var serviceName = serviceRoot + 'odata/';
    var factory = {
        newManager: newManager,
        serviceName: serviceName
    };

    return factory;

    function configureBreeze() {
        // use Web API OData to query and save
        breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true);

        // convert between server-side PascalCase and client-side camelCase
        breeze.NamingConvention.camelCase.setAsDefault();
    }

    function newManager() {
        var mgr = new breeze.EntityManager(serviceName);
        return mgr;
    }


}})();
.

代码其他:

(function () {
'use strict';
var serviceId = 'datacontext';
angular.module('myApp')
.factory(serviceId, ['$q', 'logger', 'entityManagerFactory', datacontext]);

function datacontext($q,logger,emFactory) {
    logger = logger.forSource(serviceId);
    var logError = logger.logError;
    var logSuccess = logger.logSuccess;
    var logWarning = logger.logWarning;

    var manager = emFactory.newManager();

    var service = {
        getEmployees: getEmployees
    };
    return service;

    /*Hiện thực ở đây*/
    function getChangesCount(){
        return manager.getChanges().length;
    }

    function getEmployees(forceRefresh) {
        var count;
        if (forceRefresh) {
            if(manager.hasChanges()){
                count = getChangesCount();
                manager.rejectChanges();//undo tất cả các thay đổi ko được lưu
                logWarning('Số nhân viên' + count + 'bị thay đổi', null, true);
            }
        }
        // Lúc ko có forceRefesh,xem xét nhận bộ nhớ cache hơn từ xa
        return breeze.EntityQuery.from('Employees')
                        .using(manager).execute()
                        .then(success).catch(failed);
        function success(response) {
            count = response.results.length;
            logSuccess('Đã nhận ' + count + ' nhân viên', response, true);
            return response.results;
        }
        function failed(error) {
            var message = error.message || "Truy vấn để bảng nhân viên bị lỗi";
            logError(message, error, true);
        }
    }
}})();
.

代码其他:

(function () {
'use strict';

var controllerId = 'employees';
angular.module('myApp')
.controller(controllerId, ['datacontext', 'logger', employees]);

function employees(datacontext, logger) {
    logger = logger.forSource(controllerId);
    var logError = logger.logError;
    var logSuccess = logger.logSuccess;

    var vm = this;
    vm.employees = [];

    initialize();

    /*Hiện thực*/
    function initialize() {
        getEmployees();
    }

    function getEmployees(forceRefresh) {
        return datacontext.getEmployees(forceRefresh).then(function (data) {
            return vm.employees = data;
            console.log(data);
        });
    }
}}());
.

有帮助吗?

解决方案

此问题很可能与CamelCase命名约定和您正在使用的语言和/或属性名称有关。我的猜测是,如果删除将驼峰设置为默认的行,则错误将消失。如果是这样,那么您需要编写自己的自定义命名约定。查看 http://www.breezejs.com/documentation/naming-convention

这发生的原因(我在这里猜测),是Camelcase命名约定是非常简单的,可能无法为您的房产名称和/或语言工作。它假设所有服务器属性名称以大写字符开头,并且此字符可以转换为小写字符,然后进一步颠倒此过程。我的猜测是你的一个属性名称已经有一个是小写的第一个字符,或者在属性名称中调用toolow / toupper在属性名称中的某些第一个字符本身都不是往返。 (这可能发生是一些非拉丁字符集)。

如果发生这些情况中的任何一种,它实际上是相当容易创建自己的命名控制,而不是'camelcase'。再次看到上面提到的文档。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top