anchor.diff:      member this.GetForUpdate databaseName docKey =
           this.Get AccessMode.Update databaseName docKey
   
  -    member this.Set databaseName docKey value =
  +    member this.Set databaseName docKey (value : obj * RavenJObject * Etag) =
           let cacheKey = getCacheKey databaseName docKey
           cache.Set(cacheKey, value, DateTimeOffset.MaxValue)
   
  
positive.code: 
  open Eventful
  
  type RavenMemoryCache(cacheName : string) =
      let cache = new MemoryCache(cacheName)
  
  //    let cacheHitCounter = Metrics.Metric.Meter("RavenOperations Cache Hit", Metrics.Unit.Items)
  
      let getCacheKey databaseName docKey = databaseName + "::" + docKey
  
      member this.Get<'T> mode databaseName docKey =
          let cacheKey = getCacheKey databaseName docKey
  
          let cacheEntry =
              match mode with
              | AccessMode.Read ->
                  // Entry will remain in the cache.
                  cache.Get cacheKey
              | AccessMode.Update ->
                  // Entry will be removed from the cache to avoid other readers seeing a partially updated object.
                  cache.Remove cacheKey 
  
          match cacheEntry with
          | :? 'T as cacheHit ->
              //cacheHitCounter.Mark()
              Some cacheHit
          | null -> None
          | _ -> failwith <| sprintf "Unexpected entry type %A" cacheEntry
  
      member this.GetForRead databaseName docKey =
          this.Get AccessMode.Read databaseName docKey
  
negative.code:         let requestCacheMatches =
              requests
              |> Seq.map(fun request -> 
                  let cacheEntry = cache.Get request.AccessMode database request.DocumentKey
                  (request.DocumentKey, request.DocumentType, cacheEntry))
  
          let toFetch =
  