Я реализую сервисный уровень, где мне нужно убедиться, что в транзакции происходит определенное количество операций по нескольким таблицам. Вот работа.Как получить видимость для вставленных записей, где DbContext еще не сохранен
- Я получаю экземпляр объекта HistoricalData, который необходимо сохранить в таблице HistoricalData. Это выполняется в методе AddHistoricalData.
- Мне нужно получить все записи из таблицы HistoricalData, которые включают в себя то, что вставлено в # 1, но могут иметь больше записей. Это делается в методе ProcessAllData.
- После обработки всех этих записей результаты сохраняются в двух других таблицах: ProcessStatus и ProcessResults. Если что-то пойдет не так, мне нужно, чтобы транзакция с откатом включала то, что было введено в операцию №1.
Вот как это реализовано.
public class HistoricalDataService : IHistoricalDataService
{
private MyDbContext dbContext;
public HistoricalDataService(MyDbContext context)
{
this.dbContext = context;
}
void AddHistoricalData(HistoricalData hData)
{
// insert into HistoricalData table
}
void ProcessAllData()
{
// Here we process all records from HistoricalData table insert porcessing results into two other tables
}
void SaveData()
{
this.dbContext.SaveChanges();
}
}
Вот как эти методы класса были вызваны.
HistoricalDataService service = new HistoricalDataService (dbcontext);
service.AddHistoricalData(HistoricalData instance);
service.ProcessAllData();
service.SaveData();
Проблема такого подхода заключается в том, что все, что вставляется в HistoricalData таблицы во время вызова метода AddHistoricalData не видно в вызове ProcessAllData, поскольку dbContext.SaveChanges вызывается только в конце. Я думаю, что мне нужно каким-то образом включить область транзакций, но не уверен, как выставить функцию, в которой должна быть запущена эта область транзакций?
Почему вы говорите, что HistoricalData не виден? если вы вставляете объекты HistoricalData в dbContext.HistoricalData, то вы должны иметь возможность получить эти объекты в методе ProcessAllData – taquion
Не знаете, почему, но где был вставлен в метод AddHistoricalData с использованием context.HistoricalData.Добавить просто видно в ProcessAllData Method в контексте. Коллекция HistoricalData. Я предполагаю, что мне нужно вызвать SaveChanges в контексте –