使用C#

时间:2017-06-14 19:15:59

标签: sqlite sqlite-net database-locking

我有一个要求,其中如果找到一个新对象,我将其唯一ID添加到继承此类的所有父类。例如 如果C:B和B:A(C扩展B和B扩展A),那么如果为C找到一个新对象,由于继承,该对象也是B和A类型,因此该对象进入其中一列包含其所有子实例的A和B(子)。因此我想把它作为一个数组。 为了实现这一点,我正在读取A和B的行并获取子列,将其反序列化为数组并将其放回到db。 现在这肯定有锁定问题。 例如,如果同时发现D:C或D:B的实例,那么它们都将读取相同的副本,最后一次写入将赢得先前写入的擦除实例。

有没有办法在我的交易(在本例中为read - > update array - > write)完成之前不允许其他人阅读它来消除此问题。

是否有任何建议的方法来解决此问题。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的要求,那么我认为您需要使用EXCLUSIVE锁来嵌套您的交易,例如:

sqlite3_exec(db, "BEGIN EXCLUSIVE", 0, 0);
...
sqlite3_exec(db, "END", 0, 0);