適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
透過 SQL 資料庫專案中的專案參考,你可以建立 SQL 專案與其他專案之間的相依關係。 專案參考主要有兩種類型:
-
資料庫參考 - SQL 專案或檔案參考
.dacpac與提供資料庫物件定義的 NuGet 套件之間的相依關係。 - .NET 專案參考 - 從 .NET 專案到 SQL 專案的參考,用於整合測試、部署自動化及程式碼生成等情境。
當你了解何時以及如何使用每種參考後,就能有效規劃資料庫開發的工作流程。
資料庫參考
資料庫參考允許 SQL 專案整合來自其他 SQL 專案的物件、 .dacpac 檔案或已發佈的 NuGet 套件。 當你的資料庫物件依賴於其他定義的物件時,例如共享結構中的資料表或系統資料庫物件,這些參考會被使用。
同一解決方案中另一個 SQL 專案的基本資料庫參考如下:
<ItemGroup>
<ProjectReference Include="..\Database1\Database1.sqlproj" />
</ItemGroup>
資料庫參考支援三種關係類型:
- 相同資料庫 - 參考專案中的物件會成為同一資料庫模型的一部分。
- 不同資料庫,同一台伺服器 ——參考物件使用三段命名,並搭配 SQLCMD 變數作為資料庫名稱。
- 不同的資料庫,不同的伺服器 ——參考物件使用四部分命名,並同時為伺服器與資料庫名稱加上 SQLCMD 變數。
如需詳細說明如何設定資料庫參考,包括每種關係類型的範例,以及關於如何建立與發佈有參考的專案指引,請參閱 資料庫參考總覽。
.NET 專案參考
.NET 專案可以參考 SQL 專案,將資料庫開發與應用程式程式碼整合。 當 .NET 應用程式需要存取 SQL 專案的建置輸出(檔案 .dacpac )以進行測試、部署或程式碼產生時,此參考類型非常有用。
使用案例
從 .NET 專案引用 SQL 專案的常見情境包括:
- 整合測試 - 在執行測試前,將資料庫架構部署到測試容器或本地實例的測試專案。
-
部署自動化 -主控台應用程式或工具,能程式化地部署
.dacpac到目標環境。 - 模型程式碼產生 - 根據 SQL 專案中定義的資料庫架構產生程式碼的應用程式。
設定專案引用參考
當你從 .NET 專案加入專案參考到 SQL 專案時,必須包含該 ReferenceOutputAssembly="false" 屬性。 此屬性告訴 .NET 建置程序將 SQL 專案視為建置相依,而不會嘗試將其引用為 .NET 組合語言。
<ItemGroup>
<ProjectReference Include="..\Database1\Database1.sqlproj" ReferenceOutputAssembly="false" />
</ItemGroup>
這個 ReferenceOutputAssembly="false" 設定是必要的,因為 SQL 專案主要輸出是檔案 .dacpac ,而不是 .NET 組合語言。 若無此屬性,.NET 建置程序嘗試將 .dacpac 作為組件載入,結果會發生類似以下錯誤:
error CS0009: Metadata file 'Database1.dacpac' could not be opened -- Unknown file format.
在你的 .NET 專案中存取 DACPAC
在你設定專案參考後,會先建置 SQL 專案,然後才建置 .NET 專案。 該 .dacpac 檔案可在 SQL 專案的輸出目錄中取得(通常 bin/Debug 為 或 bin/Release)。
在您的 .NET 程式碼中以程式設計方式存取 .dacpac,請參考專案結構中的相對檔案路徑。 例如,在使用測試容器建立 SQL Server 實例的整合測試中:
// Path to the dacpac file built by the referenced SQL project
var dacpacPath = Path.Combine(
Directory.GetCurrentDirectory(),
"..", "..", "..", "..",
"Database1", "bin", "Debug",
"Database1.dacpac");
// Use DacFx to deploy the dacpac to your test database
var dacServices = new DacServices(connectionString);
using var dacpac = DacPackage.Load(dacpacPath);
dacServices.Deploy(dacpac, "TestDatabase");
將 dacpac 複製到 output 目錄
若要更方便地存取 .dacpac 檔案,請在建置時設定 .NET 專案將其複製到輸出目錄。 新增以下設定到你的 .csproj 檔案中:
<ItemGroup>
<None Include="..\Database1\bin\$(Configuration)\Database1.dacpac"
CopyToOutputDirectory="PreserveNewest"
Link="Database1.dacpac" />
</ItemGroup>
此設定會將 .dacpac 檔案複製到你 .NET 專案的輸出目錄,讓你可以用更簡單的路徑來引用它:
var dacpacPath = Path.Combine(
AppContext.BaseDirectory,
"Database1.dacpac");