我正在使用C#和.NET框架,并且具有连接到数据库的单片服务器。我正在将服务器上传到AWS并初始化它的两个实例。
问题在于写入数据库。
我正在使用Entity Framework,以下是问题代码:
using (var db = new CordioContext())
{
Student student = db.Students.Where(s => s.Id == studentId).FirstOrDefault();
student.coursesCount++;
db.SaveChanges();
}
当我只有一个服务器实例时,可以在学生ID上加一个锁,并避免两个线程试图同时更新同一实体。
当我有两个连接到同一数据库的不同实例时该怎么办?
它在微服务架构中是如何完成的?
我已经阅读了一些有关交易的信息,但是我不确定这是否可以解决我的问题。
上面的示例代码仅用于解释问题。在我的代码中,我要更改更多字段并将所有内容都转移到SQL查询而不是EF代码中,这非常丑陋。
谢谢!
答案 0 :(得分:0)
“同时更新同一实体。”-这种“同时”的情况很少发生,即使这样做,因为您已经在使用实体框架,请使用实体的版本控制。 “更新XXX集(....),其中XXX.version_id = old_version_id
+ 1;
这将负责并行更新。数据库写操作已序列化。