Я использую ADO. NET с адаптером данных для заполнения набора данных в моем. NET Core 3.1 Project. Первый запуск метода Fill происходит при первоначальном запуске моей программы, поэтому у меня есть кэш памяти, чтобы начать использовать его с логами c для бизнеса / программы. Затем, когда я делаю какие-либо изменения в таблицах с помощью EF Core, после сохранения изменений я запускаю метод Заполнение адаптера данных, чтобы заново заполнить набор данных обновлениями из таблиц, которые были изменены в SQL через EF Core. .
Чтение различных документов в течение нескольких дней, и мне неясно, перезаписывает ли метод Заполнение адаптера данных все существующих строк таблицы в наборе данных каждый раз при заполнении метод называется? то есть, если я загружаю набор данных с таблицей из SQL, содержащей 10 000 строк, будет ли он перезаписывать все 10 000 строк, которые существуют в наборе данных, даже если 99% строк не изменились?
Причина, по которой я иду по маршруту набора данных, заключается в том, что я хочу сохранить и в кеше памяти различные таблицы из SQL, чтобы я мог запрашивать данные максимально быстро, не вызывая запросов SQL все время.
Решение, которое я хочу, это что-то вроде метода заполнения адаптера данных, но я не хочу, чтобы набор данных перезаписывался для любых строк, которые не были изменены в SQL с момента последнего запуска.
Так все уже работает? или мне нужно искать другое решение?
Ниже приведен только пример метода заполнения адаптера.
public async Task<AdoNetResult> FillAlarmsDataSet()
{
string connectionString = _config.GetConnectionString("DefaultConnection");
try
{
string cmdText1 = "SELECT * FROM [dbo].[Alarm] ORDER BY Id;" +
"SELECT * FROM [dbo].[AlarmApplicationRole] ORDER BY Id;";
dataAdapter = new SqlDataAdapter(cmdText1, connectionString);
// Create table mappings
dataAdapter.TableMappings.Add("Alarm", "Alarm");
dataAdapter.TableMappings.Add("AlarmApplicationRole", "AlarmApplicationRole");
alarmDataSet = new DataSet
{
Locale = CultureInfo.InvariantCulture
};
// Create and fill the DataSet
await Task.Run(() => dataAdapter.Fill(alarmDataSet));
return AdoNetResult.Success;
}
catch (Exception ex)
{
// Return the task with details of the exception
return AdoNetResult.Failed(ex);
}
}