我尝试migrate
我的应用从net 4.6.1
到netcore2.0
,并且发生了Microsoft.SqlServer.Dac
的一些问题。我使用.dacpac
从DacServices (Microsoft.SqlServer.Dac 1.0.1)
文件部署数据库,但仅package supports
net 4.6.1.
如何从{{1}部署.dacpac
文件应用程序?
谢谢你的回答!
答案 0 :(得分:6)
.NET Core
support for DacFx
已计划好,但尚未在此处进行,您无法在.NET Core
中this way执行此操作。现在,如果添加NuGet
包Microsoft.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());