У меня есть серверное приложение ASP.NET Core, которое использует Entity Framework Core для предоставления данных своего SQL-сервера.
Есть клиенты, которые могут получать данные через вызовы API REST.
В начале связи необходимо иметь все данные о клиентах, но, используя существующие вызовы REST, требуется минут , поскольку контекст содержит тысячи объектов.
Итак, я посмотрелдля идей и попробовал следующее.
Самой привлекательной идеей была какая-то сериализация, поэтому я создал следующий метод:
public byte[] GetData()
{
string data = Newtonsoft.Json.JsonConvert.SerializeObject(this.ChangeTracker,
new Newtonsoft.Json.JsonSerializerSettings {
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore });
return CompressAsGZip(data);
}
Результаты:
- Сериализация (и затем сжатие)
ChangeTracker
контекста - Первоначально
ChangeTracker
пуст, поэтому я не могу сделать это, пока не сделаю запрос всех данных
- Сериализация (а затем сжатие) всего DbContext
- В нем так много объектов, что после 20% я получил OutOfMemoryException
Должен ли я создать базу данных бэкуp и отправить сжатый файл bak?Я думаю, что я не мог восстановить его в любом месте, поскольку поставщик базы данных клиента отличается ( SQLite ).
Каков был бы лучший способ отправить все данные клиенту так быстро, какэто может быть?