0

首先,我是新来的微风/角度......在阅读了一些博客并观看了一些复数视频之后,我(就像我猜的其他人一样)非常兴奋,但经过几周的尝试,我开始讨厌它,因为我我从一个问题跑到另一个问题。学习和使用这项技术是否还为时过早?

这是我的数据结构:

public class TshirtOrder
{
    public int Id { get; set; }
    public virtual Student Student { get; set; }
    public virtual ICollection<OrderItem> OrderItems { get; set; }
}

public class OrderItem
{
    public int Id { get; set; }
    [ForeignKey("Type")]
    public int TshirtTypeId { get; set; }
    public virtual TshirtType Type { get; set; }
    [ForeignKey("Size")]
    public int TshirtSizeId { get; set; }
    public virtual TshirtSize Size { get; set; }
    public double UnitPrice { get; set; }
    public int Quantity { get; set; }

    [ForeignKey("TshirtOrder")]
    public int TshirtOrderId { get; set; }
    public TshirtOrder TshirtOrder { get; set; }
}

这是相关的清风 datacontext.js:

function _createTshirtOrder() {
    var order = manager.createEntity("TshirtOrder");
    order.tshirtItems = [];
    order.tshirtItems.push(createOrderItem(lookups.tshirtTypes[0], lookups.tshirtSizes[0], 10));
    common.saveEntity(order);
    return order;

    function createOrderItem(type, size, unitPrice) {
        var item = manager.createEntity("OrderItem");
        item.type = type;
        item.size = size;
        item.unitPrice = unitPrice;
        item.quantity = 0;
        return item;
    }
}

尝试将其保存在 时common.saveEntity(order),出现错误

Error: Error while interpolating: {{tshirtOrder.orderItems[0]}}
TypeError: Converting circular structure to JSON

该错误抱怨圆形结构,但我根本没有任何圆形结构。事实上,这个结构非常标准,几周前我在另一个试验项目中使用了几乎相同的结构。我不确定我现在使用的新库是否引入了一些新缺陷。

我知道有人问过这个问题,但我检查了所有答案,但找不到我的解决方案。最相关的是这里,这是公认的解决方案:

var cache = [];
JSON.stringify(o, function(key, value) {
    if (typeof value === 'object' && value !== null) {
        if (cache.indexOf(value) !== -1) {
            // Circular reference found, discard key
            return;
        }
        // Store value in our collection
        cache.push(value);
    }
    return value;
});
cache = null; // Enable garbage collection

但是,它对我不起作用。当我调试它时,我意识到(cache.indexOf(value) !== -1)在我的情况下从来都不是真的。

非常感谢您的帮助。

更新:这是我的 saveEntity() 方法:

function _saveEntity(masterEntity) {
    // if nothing to save, return a resolved promise
    if (!manager.hasChanges()) { return $q(); }

    var description = describeSaveOperation(masterEntity);

    return manager.saveChanges().then(saveSucceeded).fail(saveFailed);

    function describeSaveOperation(entity) {
        var statename = entity.entityAspect.entityState.name.toLowerCase();
        var typeName = entity.entityType.shortName;
        var title = entity.title;
        title = title ? (" '" + title + "'") : "";
        return statename + " " + typeName + title;
    }

    function saveSucceeded() {
        logger.logInfo("saved " + description);
    }

    function saveFailed(error) {
        var msg = "Error saving " + description + ": " + getErrorMessage(error);

        masterEntity.errorMessage = msg;
        logger.logError(msg);
        // Let user see invalid value briefly before reverting
        $timeout(function () { manager.rejectChanges(); }, 1000);
        throw error; // so caller can see failure
    }

    function getErrorMessage(error) {
        var reason = error.message;
        if (reason.match(/validation error/i)) {
            reason = getValidationErrorMessage(error);
        }
        return reason;
    }

    function getValidationErrorMessage(error) {
        try { // return the first error message
            var firstItem = error.entitiesWithErrors[0];
            var firstError = firstItem.entityAspect.getValidationErrors()[0];
            return firstError.errorMessage;
        } catch (e) { // ignore problem extracting error message 
            return "validation error";
        }
    }
}

经理在哪里

var manager = new breeze.EntityManager("api/Breeze");
4

1 回答 1

0

common.saveEntity(order) 背后的代码是什么?你要通过 EntityManager.saveChanges 方法吗?

于 2013-11-08T00:02:54.997 回答