【问题标题】:Breeze - define key to add entityBreeze - 定义添加实体的键
【发布时间】:2014-03-09 21:27:39
【问题描述】:

我想向我的经理添加一个实体。 经理保存在我的 MasterViewmodel 中,我正在处理淘汰赛。

Error: Cannot attach an object to an EntityManager without first setting its key or setting its entityType 'AutoGeneratedKeyType' property to something other than 'None'

我的代码:

var item = {           
        GuidUser: masterViewModel.UserID,
        GuidProject: ProjectID,
        Start: startTime,
        End: stopTime,
        Description: workDone,
        IdCustomer: null,
        timestampId: null,
        Charged: false,
        ToCharge: toCharge,
        };
var item2 = masterViewModel.breezeProjectManager().createEntity('Timestamp', item);
masterViewModel.breezeProjectManager().addEntity(item2);

但是如何设置密钥呢?

【问题讨论】:

    标签: breeze


    【解决方案1】:

    尝试以下方法:

    var item2 = masterViewModel.breezeProjectManager()
               .createEntity('item', { timestampId: breeze.core.getUuid() });
    

    【讨论】:

    • 如果您将实体创建为 javascript 模型而不是从数据库中创建,请参阅此链接以获取完整说明。 breezejs.com/samples/nodb
    【解决方案2】:

    当第一次定义任何 EntityType 时,它​​应该至少有一个 DataProperty,它的 'isPartOfKey' 属性设置为 true。任何 EntityType 的元数据要么作为从服务器返回的元数据的结果而具体化,要么在客户端上创建。无论哪种情况,都必须先创建“EntityType”元数据,然后才能创建该类型的任何实体。

    我的猜测是,当您第一次尝试创建实体时,您尚未获取元数据或创建元数据。在您的情况下,您可以在尝试创建实体之前进行 fetchMetadata 调用。即

    breezeProjectManager().metadataStore.fetchMetadata().then(function() {
       .. perform your creation and add logic here.
    }
    

    另一种可能性是,使用 'isPartOfKey' = true 定义的任何一个(或多个字段)在调用 'addEntity' 之前都没有设置为非空值。

    【讨论】:

    • 但是如何在时间戳中为我的 Guid 设置 'isPartOfKey'= true ?
    • entityType 是如何定义的,通过 fetchMetadata 调用还是直接通过创建 entityType?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多