У меня есть код, который идет что-то вроде этого:
«грязное чтение» не работает во время действия транзакции, установленное с уровнем 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"));
}
}
.....
Является ли это ударом какой-то базы данных назад? Если так - какой? – RQDQ
Я пробовал переформатировать ваш код для удобочитаемости, и при этом я обнаружил, что это не имеет никакого смысла. Вы устанавливаете 'IsolationLevel' и не используете его. Вы объявили 'scope', но не используете его. Вы можете скопировать код непосредственно из своей IDE и вставить его в вопрос. Затем выделите его и нажмите кнопку «Код». Таким образом, SO будет префикс вашего кода точно так же, как он вышел из вашей среды IDE. –
Я установил уровень изоляции в конструкторе TransactionScope. –