0

У меня есть код, который идет что-то вроде этого:
«грязное чтение» не работает во время действия транзакции, установленное с уровнем ReadUncommitted изоляции

using (TransactionScope scope = 
    new TransactionScope(TransactionScopeOption.Required), new TransactionOptions) 
{ 

    IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted })) 
    // "dirty" read for test purposes , to see if my 
    // select will actually select the information I just inserted 

    actual = target.GetCostCentersRates(accountId); 

} 

это не работает, я проверил запросы, и они эффективны при работе данные совершаются, но когда они не совершены, возникает проблема не разрешать проверку грязного чтения даже тогда, когда уровень изоляции установлен на readuncommitted. Я хотел бы просто выяснить, почему я не могу получить доступ к информации, потому что я никоим образом не могу передать информацию в нашу базу данных, так как это метод тестирования.
спасибо!

Вот вся вещь

public void GetCostCentersRatesTest() 
    { 

     using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommited })) 
     { 
      //Arrange 
      BRL.AdministrativeArea.SystemClientBusinessRole systemClient = new BRL.AdministrativeArea.SystemClientBusinessRole(); 
      int systemClientId = systemClient.InsertSystemClient(systemClientInfo).systemClientId; 
      BRL.BRLProperties.systemClientId = systemClientId; 
      employeeInfo.multiCompaniesInfo.systemClientId = systemClientId; 
      int stateId = 1; 
      int cityId = 1; 
      int functionId = 1; 
      employeeInfo.stateId = stateId; 
      employeeInfo.cityId = cityId; 
      employeeInfo.functionId = functionId; 
      int employeeId = employees.InsertEmployeers(employeeInfo); 
      BRL.BRLProperties.employeeId = employeeId; 
      IActionReturnInfo actionAccount = (accounts.InsertAccountPlan(accountPlanInfo)); 
      int accountId = Convert.ToInt32(actionAccount.UpdateDataSourceList[0].ToString()); 
      clientInfo.stateId = stateId; 
      clientInfo.cityId = cityId; 
      clientInfo.stateIdCorrespondency = stateId; 
      clientInfo.cityIdCorrespondency = cityId; 
      clientInfo.stateIdDelivery = stateId; 
      clientInfo.cityIdDelivery = cityId; 
      clientInfo.multiCompaniesInfo.systemClientId = systemClientId; 
      clientInfo.multiCompaniesInfo.employeeId = employeeId; 
      int clientId; 
      clients.InsertClient(clientInfo, out clientId); 
      centerCostInfo.systemClientId = systemClientId; 
      centerCostInfo.clientId = clientId; 
      centerCostInfo.employeeId = employeeId; 
      centerCostInfo.directorID = employeeId; 
      centerCostInfo.managerID = employeeId; 
      centerCostInfo.multiCompaniesInfo.systemClientId = systemClientId; 
      centerCostInfo.multiCompaniesInfo.employeeId = employeeId; 
      IActionReturnInfo action = new CenterCostsBusinessRole().InsertCostCenter(centerCostInfo); 
      int centerCostId = Convert.ToInt32(action.UpdateDataSourceList[0].ToString()); 
      rate.accountId = accountId; 
      rate.centerCostId = centerCostId; 
      costCenterRates.Add(rate); 
      int costCenterRateId; 
      AccountBusinessRole target = new AccountBusinessRole(); 
      DataSet actual; 

      IActionReturnInfo costCenterRateAction = accounts.InsertCenterCostRates(costCenterRates); 
       costCenterRateId = Convert.ToInt32(costCenterRateAction.UpdateDataSourceList[0].ToString()); 

       //Act 
       actual = target.GetCostCentersRates(accountId); 



      //Assert 
      Assert.IsTrue(FindInDataset(costCenterRateId, actual, "ACCOUNTID")); 
     } 
    } 

.....

+0

Является ли это ударом какой-то базы данных назад? Если так - какой? – RQDQ

+0

Я пробовал переформатировать ваш код для удобочитаемости, и при этом я обнаружил, что это не имеет никакого смысла. Вы устанавливаете 'IsolationLevel' и не используете его. Вы объявили 'scope', но не используете его. Вы можете скопировать код непосредственно из своей IDE и вставить его в вопрос. Затем выделите его и нажмите кнопку «Код». Таким образом, SO будет префикс вашего кода точно так же, как он вышел из вашей среды IDE. –

+0

Я установил уровень изоляции в конструкторе TransactionScope. –

ответ

2

Для грязного чтения для работы. Вы начинаете транзакцию (явно) раздвинуть изменения в БД

В другом tranasaction с ReadUncommitted выбрать данные, вы получите неизрасходованные вещи, как хорошо.

Тогда вы либо откат или совершить сделку вы сделали изменения в.

Так что с сказать SQL Manager сервер Запустите запрос

Start Transaction 
Insert SomeTable(500) 

Запустите другой запрос

Select * from SomeTable With(READUNCOMMITTED) 

вы увидите 500 записей.

Попытка выяснить, почему вы делаете это, если честно, используемая модель ADO.Net отключена, делает ее ненужной, за исключением распределенных транзакций, и вы не будете их тестировать. Если все, что вы тестируете, это вставки, просто делайте это, звучит почти так, как если бы вы проводили сеанс на живом дБ, который квалифицируется, - это серьезно плохо.

+0

Мы просто хотели использовать что-то как способ тестирования всех наших методов, потому что наши методы обрабатывают данные, и нам нужно знать в этом случае, например, если выбор правильно фильтрует информацию. Чтобы выполнить выбор, мы должны имитировать вставку, чтобы гарантировать, что фактические данные существуют в базе данных. Это будет сделано только в нашей базе разработки (теста) –

+0

Итак, почему вы не можете просто передать данные в тестовую базу данных. К тому времени, когда вы столкнулись с этим, вы все равно не проверяете, что используете. О, и readuncommitted - это намек, dbms может игнорировать его. –

+0

О, это может быть проблема. Ну, дело в том, что я просто следую заказам, я думаю, что они в конечном итоге поставят тест на нашу окончательную версию и будут использовать его, чтобы при компиляции, что версия полностью функциональна. Вот почему мы используем область транзакций, поэтому мы ничего не совершаем. На данный момент нам это не нужно, поскольку они использовали тестовую базу данных, но я думаю, что в будущем ... кто знает. Заказы Босса! –

Смежные вопросы