Azure 移动服务 "Cannot insert if the id member is already set."
Azure Mobile Service "Cannot insert if the id member is already set."
我正在构建 Azure 移动服务并尝试使用 Entity Framework Code First。我让我的数据库实体继承自 Microsoft.WindowsAzure.Mobile.Service.EntityData
class,其中包括一个 Id
字符串 属性 作为主键。我希望能够在插入时为 Id
传递一个值,但我得到响应 "Cannot insert if the id member is already set."
如果我没有为 Id
传递一个值,则插入成功并且该行有一个 GUID Id
值。
我已经尝试使用 fluentAPI 指定此 table 上的 Id
列不会由数据库在 DbContext 的 OnModelCreating 方法中生成:
modelBuilder.Entity<User>().Property(p => p.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);
我也尝试过属性修饰方式,通过重建 DataEntity
class 来满足我的需要
public class User : ITableData
{
public string EmailAddress { get; set; }
public string UserName { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Index(IsClustered = true)]
[TableColumn(TableColumnType.CreatedAt)]
public DateTimeOffset? CreatedAt { get; set; }
[TableColumn(TableColumnType.Deleted)]
public bool Deleted { get; set; }
[Key]
[TableColumn(TableColumnType.Id)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[TableColumn(TableColumnType.UpdatedAt)]
public DateTimeOffset? UpdatedAt { get; set; }
[TableColumn(TableColumnType.Version)]
[Timestamp]
public byte[] Version { get; set; }
}
我在这里错过了什么?
直接测试服务我能够毫无问题地插入 Id
s,所以事实证明这不是 EF 问题。问题是 Azure 移动服务 Javascript 客户端区分大小写。仅当 Id == 'id' 的 JSON 参数时,为 Id
插入指定值才有效。将 Id 全部小写后,一切都是桃色的。
如果不出意外,我希望这有朝一日能为某人节省一些时间。
@DevNoob,感谢您的调查。我已经提交了一个问题来跟踪这个错误:https://github.com/Azure/azure-mobile-apps-js-client/issues/96
我正在构建 Azure 移动服务并尝试使用 Entity Framework Code First。我让我的数据库实体继承自 Microsoft.WindowsAzure.Mobile.Service.EntityData
class,其中包括一个 Id
字符串 属性 作为主键。我希望能够在插入时为 Id
传递一个值,但我得到响应 "Cannot insert if the id member is already set."
如果我没有为 Id
传递一个值,则插入成功并且该行有一个 GUID Id
值。
我已经尝试使用 fluentAPI 指定此 table 上的 Id
列不会由数据库在 DbContext 的 OnModelCreating 方法中生成:
modelBuilder.Entity<User>().Property(p => p.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);
我也尝试过属性修饰方式,通过重建 DataEntity
class 来满足我的需要
public class User : ITableData
{
public string EmailAddress { get; set; }
public string UserName { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Index(IsClustered = true)]
[TableColumn(TableColumnType.CreatedAt)]
public DateTimeOffset? CreatedAt { get; set; }
[TableColumn(TableColumnType.Deleted)]
public bool Deleted { get; set; }
[Key]
[TableColumn(TableColumnType.Id)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[TableColumn(TableColumnType.UpdatedAt)]
public DateTimeOffset? UpdatedAt { get; set; }
[TableColumn(TableColumnType.Version)]
[Timestamp]
public byte[] Version { get; set; }
}
我在这里错过了什么?
直接测试服务我能够毫无问题地插入 Id
s,所以事实证明这不是 EF 问题。问题是 Azure 移动服务 Javascript 客户端区分大小写。仅当 Id == 'id' 的 JSON 参数时,为 Id
插入指定值才有效。将 Id 全部小写后,一切都是桃色的。
如果不出意外,我希望这有朝一日能为某人节省一些时间。
@DevNoob,感谢您的调查。我已经提交了一个问题来跟踪这个错误:https://github.com/Azure/azure-mobile-apps-js-client/issues/96