asp.net – 在Entity Framework中的2个语句中锁定表
发布时间:2020-12-16 07:29:32 所属栏目:asp.Net 来源:网络整理
导读:我有以下声明: int newId = db.OnlinePayments.Max(op = op.InvoiceNumber) + 1;opi.InvoiceNumber = newId;await db.SaveChangesAsync(); InvoiceNumber列应该是唯一的,但这种方法很危险,因为从我获得newId的值时,可以将另一条记录添加到表中.我读到锁定表
我有以下声明:
int newId = db.OnlinePayments.Max(op => op.InvoiceNumber) + 1; opi.InvoiceNumber = newId; await db.SaveChangesAsync(); InvoiceNumber列应该是唯一的,但这种方法很危险,因为从我获得newId的值时,可以将另一条记录添加到表中.我读到锁定表会解决这个问题,但我不确定如何使用Entity Framework实现这一点. 此外,我认为也许在交易中这样做就足够了,但有人说它不是. 更新 假设这是Entity Framework中的表定义. public class OnlinePaymentInfo { public OnlinePaymentInfo() { Orders = new List<Order>(); } [Key] public int Id { get; set; } public int InvoiceNumber { get; set; } public int Test { get; set; } //..rest of the table } 现在,显然Id是表的主键.我可以将InvoiceNumber标记为Idenity: [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int InvoiceNumber { get; set; } 现在,如果我做这样的事情,这将有效: var op = new OnlinePayment { Test = 1234 }; db.OnlinePayments.Add(op); await db.SaveChangesAsync(); 它会自动为InvoiceNumber生成一个唯一的编号.但每当我更改记录时,我都需要更改此号码.例如: var op = await db.OnlinePayments.FindAsync(2); op.Test = 234243; //Do something to invalidate/change InvoideNumber here db.SaveChangesAsync(); 我试图将其设置为0,但是当我尝试为其分配值时,我收到一个错误,指示我无法分配给Identity列.这就是我尝试手动执行此操作的原因. 解决方法
你可以做的一个选择是创建关系
public class OnlinePaymentInfo { public OnlinePaymentInfo() { Orders = new List<Order>(); } [Key] public int Id { get; set; } [Key,ForeignKey("InvoiceNumber")] public InvoiceNumber InvoiceNumber { get; set; } public int Test { get; set; } //..rest of the table } public class InvoiceNumber { public InvoiceNumber() { } [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } } 当你保存OnlinePaymentInfo时,你会这样做 paymentInfo.InvoiceNumber = new InvoiceNumber(); 然后,EF将为InvoiceNumber创建一个新的标识,这将是唯一的. PS.首先不完全确定代码的语法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- .Net Core微服务入门全纪录(八)——Docker Compose与容器
- 如何在ASP.NET表中创建thead和tbody?
- asp.net-mvc – 嵌套的MVC母版页
- asp.net – 异步加载Facebook Javascript SDK
- asp.net-mvc – 为会话设置HttpContext.User
- 备忘录——IIS程序修改不生效Temporary ASP.NET
- asp.net-mvc – ASP.NET MVC3 IIS7.5:Cache-Control maxag
- asp.net – 不引用MVC的AllowHtml属性
- asp.net-mvc – 使用linq2sql在c#mvc中不显示所选项的多选列
- asp.net – 从ASP .Net应用程序上传大文件