title: Transaction fails
body: <p>I got some method:</p>
  
  <pre><code>public SaveMyData(...)
  {
      var transactionOptions = new TransactionOptions { IsolationLevel = IsolationLevel.Snapshot };
              using (var transactionScope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
              {
                  var dataInDb = dbDataService.LoadData();
  
                  dataInDb.SomeField = someNewValue;
  
                  dbDataService.SaveData(dataInDb);
  
                  transactionScope.Complete();             
              }
  }
  </code></pre>
  
  <p>So it takes string serialized Dto from database and changes field. Than save it.</p>
  
  <p><code>SaveMyData</code> can be called from different threads in same time, so i got error:</p>
  
  <blockquote>
    <p>You cannot use snapshot isolation to access table 'some table'
    directly or indirectly in database 'some db' to update, delete, or
    insert the row that has been modified or deleted by another
    transaction. Retry the transaction or change the isolation level for
    the update/delete statement</p>
  </blockquote>
  
  <p>How can i avoid this error? I need to use different isolation level?</p>
  
  <p>Inside <code>SaveData()</code> method i create new EF context and save changes.</p>
  
  <p>The way i want to make it work is:
  <code>CallerA</code> call <code>SaveMyData</code>, it locks and if <code>CallerB</code> calls it in same time he will wait untill <code>CallerA</code> commit. So i need to not allow <code>CallerB</code> read data before <code>CallerA</code> write changes.</p>