Ошибка при восстановлении базы данных на сервер: .NET Core не должен использовать модель с файловой поддержкой

Я всегда мог восстановить bacpac на SQL Server в Azure, используя такой локальный файл:

ds = new DacServices(connectionString);         
ds.ImportBacpac(BacPackage.Load(filePath), dbTargetName, 
                new DacImportOptions { 
                    ...
                    }
                });

Затем я искал способ не полностью загружать bacpac в память, поэтому я обнаружил, что BacPackage.Load имеет 2-й аргумент, который должен заботиться только об этом, поэтому я использовал его следующим образом:

BacPackage.Load(filePath, DacSchemaModelStorageType.File)

Когда я добавил это использование второго параметра, я начал получать исключение при попытке восстановить bacpac:

Ошибка при восстановлении базы данных на сервер: .NET Core не должен использовать модель с файловой резервной копией.

Почему я не могу использовать это так? Я не хочу грузить бакпака в память, так что я могу сделать?


person Yonatan Nir    schedule 28.02.2021    source источник
comment
Это ошибка: github.com/microsoft/azuredatastudio/issues/12730   -  person Martin Costello    schedule 28.02.2021
comment
Ваша база данных смонтирована на SQL Server или вы просто читаете прямо из файла MDF. Похоже, вы используете Entity, а база данных смонтирована на сервере. Таким образом, единственная память, которую вы используете, основана на операторе Select, который загружает в вашу модель только элементы из Select. Таким образом, добавление Where к выбору ограничит объем базы данных, загружаемой в вашу модель. Если ваши данные имеют DateTime, вы можете ограничить объем данных, которые загружаются по дате.   -  person jdweng    schedule 28.02.2021
comment
@MartinCostello эта ошибка кажется ошибкой сборки? в то время как моя ошибка времени выполнения   -  person Yonatan Nir    schedule 28.02.2021
comment
@jdweng мы говорим здесь о восстановлении полной базы данных из уже созданного файла bacpac. Я не могу контролировать само его создание - я получаю уже сделанный   -  person Yonatan Nir    schedule 28.02.2021
comment
Вместо того, чтобы перемещать всю базу данных одним блоком (одним пакетом), делайте это по частям. См. : docs.microsoft.com/en-us/archive/blogs/sqlcat/   -  person jdweng    schedule 28.02.2021
comment
@jdweng, не могли бы вы указать мне правильное место в ссылке? Кажется, я не могу найти где-нибудь там, где описано, как разделить бакпак на кусочки. Что мне удалось прочитать, так это то, что они говорят о загрузке bacpac в лазурь в виде большого двоичного объекта, в то время как я импортирую его локально со своей машины.   -  person Yonatan Nir    schedule 28.02.2021
comment
Если у вас несколько столов, вы можете перемещать по одному столу за раз. Каждую таблицу можно использовать ГДЕ или разделить на части.   -  person jdweng    schedule 28.02.2021
comment
@jdweng У меня есть только данный файл bacpac без информации о том, что в нем.   -  person Yonatan Nir    schedule 01.03.2021
comment
Это zip-файл с расширением bacpak. Вы можете открыть с помощью ZIP-инструмента. Возможно, вам придется переименовать файл, чтобы открыть.   -  person jdweng    schedule 01.03.2021
comment
@jdweng Мы говорим о том, чтобы сделать это с помощью кода C #, а не вручную.   -  person Yonatan Nir    schedule 01.03.2021
comment
Вы можете переименовать файл в С#. Также есть распаковочные библиотеки в c#,.   -  person jdweng    schedule 01.03.2021
comment
у вас есть пример кода, показывающий, как я могу отправлять одну таблицу за раз и как затем я могу сделать фактический импорт в Azure со всеми этими таблицами?   -  person Yonatan Nir    schedule 02.03.2021