【发布时间】:2017-01-10 17:54:51
【问题描述】:
我在一个网站上工作,我在其中使用带有 Entity Framework 6 的 Asp.Net MVC。每个用户都有一个信用,有时用户可以将他们的信用转移给其他用户。简单的方法是这样的:
public class ApplicationUser : IdentityUser
{
//....
public decimal Credit { get; set; }
}
var user1 = await db.Users.FindAsync(id1);
var user2 = await db.Users.FindAsync(id2);
user1.Credit -= amount;
user2.Credit += amount;
await db.SaveChangesAsync();
但是,我认为这很容易受到并发问题的影响。例如,如果 2 个用户同时转移给一个用户怎么办?
由于我们将在网站上使用真钱作为信用,那么解决此问题的最安全和防故障的方法是什么?
【问题讨论】:
-
容易并发?你测试过吗?因为我做这些事情,如果有不连贯的风险,我会立即改变它......
-
我认为 ASYNC 正是为这类事情而设计的,但是,如果其中有金钱交易,您应该有一个带有交易 ID 的交易表,这样您就可以追踪一切......跨度>
-
您可以在模型中配置并发列,以便保护更新。你可以有一个
DateTime ModifiedOn { get; set; }属性。
标签: c# asp.net-mvc entity-framework concurrency