在这里更新 ravendb 分片文档存储中的文档似乎很忙,因为我使用带有 id 的 sess.store 来更新任何给定的文档,我使用 store 来避免并发更新我使用以下代码进行更新。
这是文档结构
public class DistributorRechargePayment:IPOCOLogInfo
{
[JsonIgnore]
public Guid? Etag;
public String Id { get; set; }
public String ReceiptNo { get; set; }
public TransactionTypes TransactionType { get; set; }
public String PaymentId { get; set; }
}
这是更新的代码
sess.Store(distbpayment, myguid1, distbpayment.Id);
在我的分片策略中,我引用了一个具有其他值的分片键,如下所示
var shards = new Dictionary<string, IDocumentStore>
{
{"zero", new DocumentStore {Url = "http://localhost:8080"}},
{"one", new DocumentStore {Url = "http://localhost:8081"}},
{"two", new DocumentStore {Url = "http://localhost:8082"}},
};
shardStrategy = new ShardStrategy(shards).ShardingOn<DistributorRechargePayment>(x => x.ReceiptNo);
现在这里发生的事情是当我第一次将文档存储到正确的分片时,例如,如果receiptno 是one-123455,则该文档将转到正确的分片。当我已经将文档 id 设置为 one-DistributorRechargePayment-1 时,当我再次通过商店更新时,因此 id 被重写为 one-one-DistributorRechargePayment-1,这会引发错误。
在这里我可以使用 sess.saveshanges()。但为了确保乐观并发,我需要 sess.store()。我需要一个解决方案来使用乐观并发并实现分片存储