如何从插入中仅更新一行

本文关键字:一行 更新 插入 | 更新日期: 2023-09-27 18:14:42

实体:

  public class Feature { 
     public int Id {get;set;}
     public int DeviceId {get;set;}
     public string Value {get;set;}
     public bool IsPrimary {get;set;}
   }

的故事:

每个设备都有一个功能列表。但其中只有一个可能是主要的。

可以修改'IsPrimary'的值:

  • 如果设备在db
  • 中没有任何主要功能,则在创建后WebAPI设置为'true'
  • 可由用户手动更改

有很多并行请求。当它们执行并且设备没有功能时,所有这些并行请求都会创建'IsPrimary'=true feature。

如何处理这种情况?

如何从插入中仅更新一行

我会以不同的方式处理它:IsPrimary应该是设备的属性,而不是Feature。像这样:

public class Device
{
    public List<Feature> Features { get; set; }
    public Feature PrimaryFeature { get; set; }
    // ...
}
public class Feature 
{ 
    public int Id { get; set; }
    public int DeviceId { get; set; }
    public string Value { get; set; }
}

还应该实现一些并发检查:https://msdn.microsoft.com/en-ca/data/jj592904.aspx

所以如果两个用户同时尝试修改同一个设备,其中一个会得到一个错误,他/她可以采取相应的行动。或者你可以处理并发问题,但你觉得合适。

这可能更有帮助:http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application

设置一个标记,在数据库中写入记录,并检查表中是否有一个属性已经具有IsPrimary = true。这样在数据库中就不会有多个IsPrimary记录。然后用户可以在现有记录之间切换主要特征