带有标识字段的 Azure 移动服务插入项

Azure mobile service insert item with identity field

我正在尝试插入我的 Azure 移动服务 table,但如果我的 class 中有一个在数据库中标记为身份的字段,它会失败。如果我随后进行更改,以至于我的 class 中没有它,那么我将无法从数据库中获取该字段。我需要能够同时执行这两项操作,但目前我必须选择是要能够插入还是读取。

有人知道如何解决这个问题吗?

我在 Android 和 C# 中都有同样的问题。

我试过删除集; class 中的属性,但我无法从数据库中获取该字段。

如果您在 Azure 移动服务中使用基本 table 方法,您的基础 table 必须符合以下规则:

  • table 必须在您的移动服务架构中(架构是 您的移动服务的名称)
  • table 必须有一个名为“id”的标识列,并且必须全部为小写字母

您可以阅读更多相关信息 here

好的,我明白你的问题了(希望如此!)。

实体应如下所示:

public class Foo: EntityData
{
    public string CategoryId { get; set; }

    [ForeignKey("CategoryId")]
    public virtual Category Category { get; set; }

    public string Name { get; set; }
}

public class Category : EntityData
{
    public string Name { get; set; }
}

如果您尝试添加一个引用现有类别的新 Foo,则在创建对象时您要做的就是指定 CategoryId 并单独保留 Category 成员:

Foo f = new Foo() {
    CategoryId = a_correct_Category_Id,
    Name = "a name"
}

否则,当做这样的事情时:

Foo f = new Foo() {
    Category = a_category_object,
    Name = "a name"
}

当Entity Framework 将尝试添加新的 Foo 对象时,它还会尝试添加新的 Category 对象。如果它已经存在于数据库中,你会得到一个错误