public void DeleteDocumentInTransaction(TransactionInformation transactionInformation, string key, Guid? etag)
{
var readResult = storage.Documents.Read(new RavenJObject { { "key", key } });
if (readResult == null)
{
return;
}
readResult = storage.DocumentsModifiedByTransactions.Read(new RavenJObject { { "key", key } });
StorageHelper.AssertNotModifiedByAnotherTransaction(storage, this, key, readResult, transactionInformation);
AssertValidEtag(key, readResult, storage.DocumentsModifiedByTransactions.Read(new RavenJObject {{"key", key}}),etag);
if (readResult != null)
{
((RavenJObject)readResult.Key)["txId"] = transactionInformation.Id.ToByteArray();
if (storage.Documents.UpdateKey(readResult.Key) == false)
throw new ConcurrencyException("DELETE attempted on document '" + key +
"' that is currently being modified by another transaction");
}
storage.Transactions.UpdateKey(new RavenJObject
{
{"txId", transactionInformation.Id.ToByteArray()},
{"timeout", SystemTime.UtcNow.Add(transactionInformation.Timeout)}
});
var newEtag = generator.CreateSequentialUuid();
storage.DocumentsModifiedByTransactions.UpdateKey(new RavenJObject
{
{"key", key},
{"etag", newEtag.ToByteArray()},
{"modified", SystemTime.UtcNow},
{"deleted", true},
{"txId", transactionInformation.Id.ToByteArray()}
});
}