如何将关系数据从客户端保存到Azure Mobile Apps



在我的Xamarin中。表单项目有一个Category模型,其中包含一个Grades列表。用户必须能够选择一个Category并向其添加一个新的Grade。但是,我在保存与父Category有关系的Grade时遇到了问题。

问题:如何在引用现有父Category的情况下添加Grade?我的代码主要是执行以下操作来添加一个新的Grade

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

当我尝试这样做时,我会得到以下错误。

由于冲突,操作失败:"违反PRIMARY KEY约束"PK_dbo。类别"。无法在对象"dbo"中插入重复的键。类别"。重复的键值为(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类添加一个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; }
}

有关更多详细信息,您可以参考这篇文章和这篇关于1:n与移动服务关系的博客。

最新更新