带有标识字段的 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 对象。如果它已经存在于数据库中,你会得到一个错误
我正在尝试插入我的 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 对象。如果它已经存在于数据库中,你会得到一个错误