如何将客户端的关系数据保存到 Azure 移动应用

How do I save relational data from the client to Azure Mobile Apps

在我的 Xamarin.Forms 项目中有一个 Category 模型,其中包含 Grades 的列表。用户必须能够 select 一个 Category 并向其添加一个新的 Grade。但是,我无法保存与父 Category.

有关系的 Grade

问题:如何添加 Grade 以引用现有的父 Category? 我的代码本质上是执行以下操作以添加新的 Grade.

Category category = await cloudService.GetDefaultCategory();
Grade grade = new Grade() { Title = "Grade 1", Category = category };
await gradeTable.CreateItemAsync(Grade); // this is an IMobileServiceTable

当我尝试这样做时,出现以下错误。

The operation failed due to a conflict: 'Violation of PRIMARY KEY constraint 'PK_dbo.Categories'. Cannot insert duplicate key in object 'dbo.Categories'. The duplicate key value is (DA289023-09DC-45B8-B277-C3546E99F2DA).

客户模型

public class Category : TableData
{
    public string Title { get; set; }
    public List<Grade> Grades { get; set; }
}
public class Grade : TableData
{
    public string Title { get; set; }
    public Category Category { get; set; }
}
public abstract class TableData
{        
    public string Id { get; set; }
    public DateTimeOffset? UpdatedAt { get; set; }
    public DateTimeOffset? CreatedAt { get; set; }
    public byte[] Version { get; set; }
}

服务器型号

public class Category : EntityData
{
    public string Title { get; set; }
    public List<Grade> Grades { get; set; }
}
public class Grade : EntityData
{        
    public string Title { get; set; }
    public Category Category { get; set; }
}

正如Eric所说,你需要在Grade class上加一个CategoryId 属性。 TableData 中的 Id 是远程存储中的主键,但它无法为您管理关系。

public class Grade : TableData
{
    public string Title { get; set; }
    public string Id { get; set; }
    public string CategoryId { get; set; }
    public Category Category { get; set; }
}

public class Category : TableData
{
    public string Title { get; set; }
    public string Id { get; set; }
    public List<Grade> Grades { get; set; }
}

有关更多详细信息,您可以参考此article and this blog关于1:n与移动服务的关系。