依靠其他实体在微风中创建实体

Create entity in Breeze relying on other entity

本文关键字:实体 创建 微风 其他 依靠      更新时间:2023-09-26

我正在使用BreezeJS和Durandal。这一切都很好,但我有一个关于创建一个与另一个实体有关系的新实体的问题。

假设我们有一个实体客户和订单。当我创建一个依赖于客户的新订单时,它有两个字段,一个用于customerID,另一个用于customer it self!customerID给定正确,但由于没有Customer对象而崩溃!我该如何解决此问题?

我的数据服务.createT是:

 // This function creates an entity for the specific table (entity)
        // that is passed as an parameter. The entity is the same as the table name 
        //in the map folders. So for creating a new Memo entity should be tblMemo
        Dataservice.prototype.createT = function (initialValues, entity) {
            return this.manager.createEntity(entity, initialValues);
        };

var repairOrderLineN = dataservice.createT({
                        RepairOrderID: '1', CustomerID: result[0].CustomerId,
                        Description: result[0].Description, InternalCode: result[0].Code,
                        Hours: result[0].Hours, Tariff: result[0].Tariff,
                        Costs: result[0].Costs, Quantity: result[0].Qty,
                        DamageCode: result[0].Dam, RepairCode: result[0].Rep,
                        MaterialCode: result[0].Mat, LocationCode: result[0].Location,
                        IsAgreement: result[0].IsAgreement, IsAuthorized: result[0].IsAuthorized,
                        DoRepair: result[0].DoRepair
                    }, 'tblRepairOrderLine');
                    if (repairOrderLineN.entityAspect.validateEntity()) {
                        extendItem(repairOrderLineN);
                        repairorderlines.push(new repairorderline(repairOrderLineN));
                        dataservice.saveChanges();
                        updateFinance();
                    }

JSON是从模态中提供的,用于创建实体,当然我知道客户对象不在其中!该死的我迷路了:S帮助:(

我需要更多关于您的案例的信息,特别是您所说的"崩溃"是什么意思。

我不知道你的dataservice.createT是干什么的。实际上,这里的答案有点太复杂了。你能为我们简化一个测试用例吗?

同时,这里有一个通过的测试,我将它添加到DocCode示例的">entityTests.js"中,该示例演示了您使用Northwind的场景。

/**********************************************************添加具有初始值设定项的订单,该初始值设定器按Id设置其父级Customer*********************************************************/test("add Customer created using initializer with parent Customer Id",4,function(({var em=newEm((;//创建新的父客户var parentCustomer=em.createEntity("客户"{客户ID:breez.core.getUuid((,公司名称:"TestCo"});//作为父客户的子级的新订单var newOrder=em.createEntity("订单",{CustomerID:parentCustomerID((}(;ok(newOrder.entitySpect.entityState.isAdded((,"newOrder应为'addd'"(;ok(parentCustomer.entitySpect.entityState.isAdd((,"parentCustomer应为'add'"(;var orderCustomer=newOrder.Customer((;ok(orderCustomer,"newOrder的父"Customer"属性应返回Customer实体"(;ok(orderCustomer===parentCustomer,"newOrder的父Customer应为"+parentCustomer.CompanyName(((;});

如果父客户以前存在(例如,已被提取(,它也同样有效。

顺便说一句,我不得不初始化parentCustomer.CustomerID,因为它在元数据中被定义为客户端生成的密钥。在我们的大多数示例中,实体密钥是存储生成的(例如,Order.OrderID(,不会指定。

更新日期:2013年4月30日

我怀疑初始化器对象中的某个位置是result[0].something,其中something是一个实体,而不是一个简单的数据值(例如,整数id(。

在我写这篇文章的时候,如果任何初始值设定项值是Breeze实体,那么createEntity就会爆炸。这个问题将在1.3.2版中得到解决,该版本很快就会发布。请注意,这个新功能将首先进行测试。API不会改变,但有很多边缘条件,很难涵盖所有这些条件。清除挥之不去的bug需要时间。

不管怎样,你今天都有其他选择。如果您只是使用相关实体的外键ID进行初始化,而不是使用相关实体本身进行初始化,那么就可以了。或者,您可以在第一次创建实体后分配相关实体,如下所示:

。。。var thing=manager.createEntity("ing"{…使用简单数据值初始化}var thing.latedEntityA=相关实体A;var thing.latedEntityB=相关实体B;。。。