簡體   English   中英

TFS遷移-數據庫項目循環依賴

[英]TFS Migration - Database Project Circular Dependency

我正在嘗試為Web應用程序(也包含數據庫作為數據庫項目)創建解決方案,然后使用Web部署應用程序和DACPAC從SQL數據庫從TFS部署它。 不幸的是,該數據庫使用三部分名稱引用了另一個數據庫:

Select * From Database1.dbo.Table1

這迫使我將引用的數據庫作為一個項目導入該應用程序的解決方案中,並將其設置為另一個項目中的引用,如下圖所示:

在此處輸入圖片說明

在此處輸入圖片說明

問題在於Database1引用了Database2,但是Database2也引用了Database1。

但是,當我嘗試執行此操作時,出現以下錯誤:

在此處輸入圖片說明

我在網上搜索了一個解決方案,發現了兩個:

1)使用復合項目創建另一個包含兩個數據庫之間的引用的第3個項目,然后使該項目引用其他兩個。

請參閱此鏈接: 復合項目解決方案

2)將所有3部分名稱查詢替換為動態SQL,例如:

EXEC('Select * From Database1.dbo.Table1')

這些解決方案都對我沒有好處,因為我不僅有兩個相互引用的數據庫,而且還有許多引用引用它們的中央數據庫的數據庫,如以下模式所示: 在此處輸入圖片說明

第一個解決方案將要求我將所有數據庫導入每個應用程序的解決方案中(因為它們通過中央數據庫相互鏈接)。 每對項目(數據庫,中央數據庫)也將存在循環引用錯誤。

第二種解決方案將起作用,因為查詢將被視為字符串,並且不需要我在解決方案中引用中央數據庫,但是我不喜歡擁有這么多動態查詢的想法。 同樣,在每個應用程序數據庫中用動態SQL替換所有查詢也是一項繁重的工作。

我想知道除了我提到的兩種解決方案之外,還有其他解決方案嗎?

解決循環引用問題的正確方法是使用復合項目。

通常,“技巧”包括在每個數據庫的復合項目中隔離所有共享對象(以及這些對象所引用的對象;例如,共享視圖及其定義中使用的所有表/函數)。 這樣,每個數據庫將由幾個數據庫項目定義:一個包含僅在數據庫內部使用的對象(基礎),另一個包含所有要與其他數據庫共享的對象(共享)。 然后,您必須將基礎數據庫項目與共享的項目鏈接在一起,該共享項目的定義中需要使用該對象。

一張圖片值一千字:

在此處輸入圖片說明

虛線表示“相同數據庫”引用(復合項目)。 實線是“常規”引用。

我已經用一般情況更新了我的博客文章:

SSDT:如何解決循環引用問題

您也可以從現有數據庫中創建一個dacpac並將該dacpac添加為數據庫引用。 我們使用“ Schema”文件夾存儲了所有的dacpac,並根據需要對其進行了更新/引用。

http://schottsql.blogspot.com/2012/10/ssdt-external-database-references.html

您可以創建另一個可以引用為Database1和Database2的項目,並且該項目可以處理兩個項目之間的調用。

並讓該項目與Web應用程序通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM