使用.Net Core 2.0应用程序中的.dacpac文件部署数据库

时间:2018-05-16 06:40:20

标签: sql-server .net-core dacpac

我尝试migrate我的应用从net 4.6.1netcore2.0,并且发生了Microsoft.SqlServer.Dac的一些问题。我使用.dacpacDacServices (Microsoft.SqlServer.Dac 1.0.1)文件部署数据库,但仅package supports net 4.6.1.如何从{{1}部署.dacpac文件应用程序? 谢谢你的回答!

3 个答案:

答案 0 :(得分:6)

.NET Core support for DacFx已计划好,但尚未在此处进行,您无法在.NET Corethis way执行此操作。现在,如果添加NuGetMicrosoft.SqlServer.DacFx.x64还原将打印出来:

  

Package' Microsoft.SqlServer.DacFx.x64 140.3881.1'恢复使用   ' .NETFramework,版本= v4.6.1'而不是项目目标框架   ' .NETCoreApp,版本= 2.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();

答案 1 :(得分:2)

截至2018年11月15日的好消息:

  

...支持netcoreapp2.1和net46的预览包:   https://www.nuget.org/packages/Microsoft.SqlServer.DACFx/150.4240.1-preview

请注意,它是Microsoft.SqlServer.DacFx nuget软件包,而不是Microsoft.SqlServer.DacFx.x86或Microsoft.SqlServer.DacFx.x64软件包,您需要在nuget中启用预发布模式。

在同一线程中讨论过:

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

接下来,我需要确定它是否有效...

答案 2 :(得分:0)

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());