多模式生成器加載模型並動態更改模型以修改實體的模式。然後它調用標準的代碼生成過程,只使用數據庫生產者(SQL Server,Oracle等)。
所以,如果你想生成2型動物模式(DBO和CONTOSO)對一個空數據庫,過程如下:
- 從一個空數據庫生成的DBO模式的數據庫
- 生成來自先前生成的數據庫的contoso模式的數據庫
在創建約束之前,SQL Server diff引擎會刪除具有相同名稱的約束。事實上,SQL Server不允許2個約束具有相同的名稱(我無法在MSDN上找到關於該頁面的更多詳細信息)。因此,在您的情況下,當您生成contoso模式時,現有的PK會被刪除,因爲PK的名稱與dbo模式中存在的名稱相同。也許這可以改善,但差異列表引擎試圖生成的SQL Server 2000工作於SQL Server 2016
變通辦法代碼
您可以生成不同的數據庫每個模式,所以diff文件引擎會生成你期望的代碼。然後,您可以在生產數據庫上運行生成的腳本。不是最簡單的方法,但它應該工作。
您可以使用補丁生產者來替換文件中架構的名稱。對於SQL文件,你應該使用SqlServerPatchProducer
作爲KnowledgeBase解釋:你的迴應
namespace Sample
{
public class SqlServerPatchProducer : SqlServerProducer
{
public SqlServerPatchProducer()
{
}
protected override void RunProceduresScript()
{
string path = GetPath(Project.DefaultNamespace + "_procedures.sql");
ProduceFrom(path, "before");
SearchAndReplaceProducer.ProducePatches(Project, null, this, null, ProductionFlags, Element);
Utilities.RunFileScript(path, Database, OutputEncoding);
ProduceFrom(path, "after");
}
}
}
你有沒有機會看看上面的答案?我完全脫離基地嗎? – user2589758
我在答案中添加了兩個解決方法 – meziantou