使用OData

时间:2016-08-26 08:24:31

标签: asp.net azure odata azure-mobile-services

这就是我的模型的样子

public User
{
    public string Id { get; set; }
    public string Username { get; set; }
    public virtual Group Group { get; set; }
}

public Group
{
    public string Id { get; set; }
    public string Name{ get; set; }
    public virtual ICollection<User> Users { get; set; }
}

我使用Azure Mobile TableController,它使用OData进行CRUD。

现在我尝试通过指定组的ID来插入新用户,但是它给了我一个错误,该错误显示不是尝试将其与我的用户模型关联,而是尝试创建新用户:

{
  "message": "The operation failed due to a conflict: 'Violation of PRIMARY KEY constraint 'PK_dbo.Groups'. Cannot insert duplicate key in object 'dbo.Groups'. The duplicate key value is (ad934511a82c4b42ae5427b5228737c6).\r\nThe statement has been terminated.'."
}

这就是我的帖子:

POST http://localhost/tables/user?ZUMO-API-VERSION=2.0.0 HTTP/1.1

{
    email: 'test@test.com',
    password: '#test',
    group: {
        id: 'ad934511a82c4b42ae5427b5228737c6'
    }
}

1 个答案:

答案 0 :(得分:2)

Azure移动应用程序不直接支持关系,但您可以应用一些变通方法来使其工作。这是一篇博客文章,介绍了该方案:30 Days of Zumo.v2 (Azure Mobile Apps): Day 26: Relationship Advice

您遇到的具体问题是实体框架&#34;已分离的实体&#34;问题。参见例如Many to Many Relationships not saving。问题是实体框架没有将子项加载到其上下文中,因此它认为它需要插入子项以及父项。 (实体框架中已经存在长期的功能请求来解决此问题,但该功能从未添加过。)

我刚刚在这里发布了一个类似的答案:How do I insert entities with a 1:n relationship in Azure App Service