我们使用 SQL Server Data Tools 项目 (.sqlproj) 管理数据库的结构,在 Visual Studio 中创建新对象并将它们发布到 SQL Server 实例(直接或通过生成发布脚本)。
SSDT 使用以下格式自动命名 FK
FK_ThisTable_ThatTable
我们使用 SqlMetal 生成 Linq-to-SQL DBML。
<Table Name="dbo.Foo" Member="Foos">
<Type Name="Foo">
<Column Name="FooID" Type="System.Int32" DbType="Int NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
<Column Name="Value" Type="System.String" DbType="VarChar(50)" CanBeNull="true" />
<Column Name="BarID" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
<Association Name="FK_Foo_Bar" Member="Bar" ThisKey="BarID" OtherKey="BarID" Type="Bar" IsForeignKey="true" DeleteOnNull="true" />
</Type>
</Table>
如果我在 VisualStudio 的设计器中打开 DBML,修改图表布局并保存,DBML 现在包含
<Association Name="Bar_Foo" Member="Bar" ThisKey="BarID" OtherKey="BarID" Type="Bar" IsForeignKey="true" DeleteOnNull="true" />
这意味着由于 MSLinqToSQLGenerator 进行了不必要的更改以及在运行 SqlMetal 后恢复了原始名称,我们在 TFS 源代码控制中的 DBML 文件的历史记录变得更加难以阅读。
如何阻止 Visual Studio 的 DBML 设计器修改 FK 名称?