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