如何从插入中仅更新一行
本文关键字:一行 更新 插入 | 更新日期: 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记录。然后用户可以在现有记录之间切换主要特征