【问题标题】:Creating an entity with a reference to an other entity in azure mobile service在 azure 移动服务中创建具有对其他实体的引用的实体
【发布时间】:2017-08-18 22:56:38
【问题描述】:

我创建了一个 azure 移动服务,它基本上由 2 个实体和 2 个 TableControllers 组成。这两个实体具有 1:1 的关系。

public class Entity1 : EntityData
{
    public int Value { get; set; }
    public DateTime Date { get; set; }
    public string Name { get; set; }
    public virtual Entity2 Reference { get; set; }
}

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

控制器是标准的脚手架生成的控制器。当我尝试插入一个引用已经存在的 entity2 的 entity1 实例时,我收到以下消息:

{"$id":"1","message":"The operation failed due to a conflict: 'Violation of 
PRIMARY KEY constraint 'PK_Service.Entity2'. Cannot insert
duplicate key in object 'Service.Entity2'. The duplicate key
value is (32aec44a282e42b7bc51096052335dad).\r\nThe statement has been 
terminated.'."}

我在请求正文中使用了以下 JSON:

{
  "value": 1,
  "date": "2015-04-27T06:51:47.641Z",
  "name": "name",
  "project": {
    "id": "32aec44a282e42b7bc51096052335dad",
  }
}

是否可以在 .NET Code First/Azure 移动服务中使用现有实体作为参考?我不太确定这是否是更多与 EF CodeFirst 或 azure 移动服务相关的问题。

谢谢。

【问题讨论】:

    标签: c# entity-framework azure ef-code-first azure-mobile-services


    【解决方案1】:

    默认行为是 Entity1 的插入也尝试插入嵌套引用。如果该值已被插入,则可能会发生这样的冲突。

    一种选择是修改插入代码以将嵌套项视为已插入,如https://msdn.microsoft.com/en-us/data/jj592676.aspx 的“将现有实体附加到上下文”部分中

    有关更多信息,此博客文章可能会有所帮助: http://blogs.msdn.com/b/azuremobile/archive/2014/06/18/insert-update-related-data-with-1-n-relationship-using-net-backend-azure-mobile-services.aspx

    【讨论】:

    • 那么,您知道更新是否也一样吗?当对象包含相关数据时,我遇到了与补丁/更新相同的问题。我有一个包含电话号码集合的个人资料。当我在移动设备上更新配置文件并将更改推送到 azure 时,我得到相同的 409 冲突,说它无法插入电话号码,因为它们已经存在。为什么它试图在更新/补丁上插入相关数据?我可以覆盖什么来防止这种情况发生?
    【解决方案2】:

    我们试图做同样的事情,但并不关心更新相关实体本身。如果要更新包含对相关实体的引用的实体,只需将它们附加到上下文,就不会出现任何 PK Violation 错误:

    【讨论】:

      猜你喜欢
      • 2018-08-08
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多