Развертывание базы данных с помощью файла .dacpac из приложения .Net Core 2.0

Я пытаюсь migrate изменить свое приложение с net 4.6.1 на netcore2.0, но возникли проблемы с Microsoft.SqlServer.Dac. Я развертываю базу данных из .dacpac файла, используя DacServices (Microsoft.SqlServer.Dac 1.0.1), но это package supports только net 4.6.1. Как я могу развернуть .dacpac файл из netcore приложения? Спасибо за ответы!


person Oleg Bezhan    schedule 16.05.2018    source источник


Ответы (3)


Планируется .NET Core поддержка DacFx, но ее пока нет, и вы не можете этого сделать этим способом в .NET Core. Теперь, если добавить NuGet пакет, Microsoft.SqlServer.DacFx.x64, восстановление напечатает вас:

Пакет Microsoft.SqlServer.DacFx.x64 140.3881.1 был восстановлен с использованием .NETFramework, Version = v4.6.1 вместо целевой платформы проекта .NETCoreApp, Version = v2.0.

Некоторое время вы можете использовать утилиту командной строки SqlPackage.exe

SqlPackage.exe 
  /Action:Publish 
  /SourceFile:C:/file.dacpac 
  /TargetConnectionString:[Connection string]

И запустить его можно программно:

var process = new System.Diagnostics.Process();
var startInfo = new System.Diagnostics.ProcessStartInfo
{
    WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
    FileName = @"C:\Program Files (x86)\Microsoft SQL Server\<Version>\DAC\bin\SqlPackage.exe",
    Arguments = "/Action:Publish /SourceFile:C:/file.dacpac /TargetConnectionString:[Connection string]"
};
process.StartInfo = startInfo;
process.Start();
person Dmitry Pavlov    schedule 16.05.2018
comment
по-прежнему нет возможности развернуть dacpac (из ядра .NET) без вызова sqlpackage.exe? - person bytedev; 22.10.2018
comment
@bytedev, как я уже упоминал в ответе, следите за github.com/Microsoft/DACExtensions/issues/20 - person Dmitry Pavlov; 23.10.2018
comment
Я спросил только потому, что вашему исходному ответу теперь 2,5 года ;-) - person bytedev; 24.10.2018
comment
Как мы видим на данный момент, DacFx .NET Core Support #20 все еще Open - person Dmitry Pavlov; 24.10.2018
comment
Я включил ответ в свой post-build event command line, чтобы база данных создавалась автоматически. - person taylorswiftfan; 05.04.2019
comment
Этот ответ следует обновить, поскольку пакет GA, поддерживающий .NET Core, уже отсутствует. nuget.org/packages/Microsoft.SqlServer.DACFx - person akrobet; 27.01.2020

Хорошие новости от 15 ноября 2018 г .:

... пакет предварительного просмотра, который поддерживает netcoreapp2.1 и net46: https://www.nuget.org/packages/Microsoft.SqlServer.DACFx/150.4240.1-preview

Помните, что это пакет nuget Microsoft.SqlServer.DacFx, а не пакеты Microsoft.SqlServer.DacFx.x86 или Microsoft.SqlServer.DacFx.x64, и вам необходимо включить предварительный режим в nuget.

Обсуждается в той же ветке:

https://github.com/Microsoft/DACExtensions/issues/20#issuecomment-439222493

Затем мне нужно узнать, работает ли это ...

person Alex KeySmith    schedule 09.01.2019

Пакет Microsoft.SqlServer.DacFx nuget теперь выпущен для netstandard2.0: https://www.nuget.org/packages/Microsoft.SqlServer.DacFx/

Чтобы опубликовать файл dacpac в SQL Server LocalDB, вы можете использовать:

using Microsoft.SqlServer.Dac;

...

var dacpac  = DacPackage.Load(@"path\to.dacpac");
var dacpacService = new DacServices("Server=(localdb)\\mssqllocaldb;Database=TargetDatabase;Trusted_Connection=True;MultipleActiveResultSets=true");
dacpacService.Publish(dacpac, "TargetDatabase", new PublishOptions());
person Paul Pawletta    schedule 01.07.2020