ADO. NET - Метод заполнения адаптера данных - Заполнить набор данных строками, измененными в SQL - PullRequest
0 голосов
/ 08 февраля 2020

Я использую 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);
        }
    }
...