错误微风OData -元数据查询http://localhost:5781/odata/$metadata失败



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

错误:

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

发生这种情况的原因(我在这里猜测)是骆驼大小写命名约定非常简单,可能不适用于您的属性名称和/或语言。它假设所有服务器属性名称都以大写字符开头,并且该字符可以转换为小写字符,并且该过程可以反过来。我的猜测是,你的一个属性名已经有一个小写的第一个字符,或者在属性名的一些第一个字符上调用toLower/toUpper本身并不往返。(这可能发生在一些非拉丁字符集)。

如果出现上述任何一种情况,实际上创建自己的命名约定来代替'camelCase'是相当容易的。再次参见上面提到的文档。

最新更新