我有一个父实体,需要进行并发检查(如下所示)
[Timestamp]
public byte[] RowVersion { get; set; }
Run Code Online (Sandbox Code Playgroud)
我有一堆客户机进程,它们从该父实体访问只读值,并主要更新其子实体。
约束
客户之间不应干涉彼此的工作(例如,更新子记录不应在父实体上引发并发异常)。
我有一个确实更新此父实体的服务器进程,在这种情况下,如果父实体已更改,则客户端进程需要抛出。
注意:客户端的并发检查是牺牲性的,服务器的工作流程是关键任务。
问题
我需要检查(从客户端进程中)父实体是否已更改,而没有更新父实体的行版本。
在EF中对父实体进行并发检查很容易:
// Update the row version's original value
_db.Entry(dbManifest)
.Property(b => b.RowVersion)
.OriginalValue = dbManifest.RowVersion; // the row version the client originally read
// …Run Code Online (Sandbox Code Playgroud) c# sql-server entity-framework database-concurrency entity-framework-6
例如.
var result = myObject.Where(x => x.prop == 5);
string s = result.toSQL();
Run Code Online (Sandbox Code Playgroud)
结果:
s 是 "SELECT * FROM [myObjects] WHERE prop = 5"