如何正确建模具有实体数组的实体的元数据?

时间:2015-06-29 06:42:40

标签: breeze

我有一个看起来像这样的JSON:

{
 username: 'johnDoe',
 password: 'mypassword'
 answers: [
  {
    field: '1',
    value: 'field1 value'        
   },
   {
    field: '2',
    value: 'field2 value'
   }
 ]
}

我试图为它创建一个实体。我已经使用了这个实体:

function addUser() {
            addType({
                name: 'User',
                dataProperties: {
                    "id": {nullOk: true, isPartOfKey: true},
                    username: {max: 255, nullOk: true},
                    password: {max: 255, nullOk: false}
                },
                navigationProperties: {
                    answers: {
                        entityTypeName: 'Answer',
                        hasMany: true
                    }
                }
            });
        }

        function addAnswer() {
            addType({
                name: 'Answer',
                dataProperties: {
                    field: {type: INT, isPartOfKey: true},
                    value: {max: 255, nullOk: true}
                }
            });
        }

问题是,每当我执行manager.saveChanges()微风从json剥离answers数组时,只有用户名和密码才会传递给我的POST请求..为什么会这样?我想传递整个对象,包括答案数组。我应该改变什么价值才能通过?

1 个答案:

答案 0 :(得分:0)

您有几个建模问题:

  • User
  • 没有关键字
  • 没有将AnswerUser
  • 关联的外键
  • Answer实际上不是EntityType
  • 的概率很大

实体必须具有唯一值的不可为空的密钥

User类型的真正非可空键是什么?它不能是id,因为JSON中没有“id”数据。 userName如何可以为空?password不可为空?

正如@SteveSchmitt所观察到的,您在Answer中看不到User.answers个实例,因为没有外键(例如userIdAnswer相关联User 1}}。

虽然Answer实体类型确实有一个不可为空的密钥field,但这是一个奇怪的密钥名称。它在所有Answer个实例中是唯一的,还是仅在给定Answer中的User个对象中唯一?

我怀疑Answer实际上不是实体类型。我还怀疑Answer数据实际上位于User数据中,并且不存储在单独的数据库结构中。如果我没错,您可能希望将Answer建模为Complex Type,将User.answers建模为此类型的数组。

回到我的问题的一些答案,我们将看到这导致我们。

感谢您试一试Breeze。