2

我们正在使用 SQL Server 生产者。我们希望每个外键列都有一个索引。SQL Server 不会自动将索引放在外键列上。我们如何自动为每个外键列创建索引?我们应该为此编写一个方面吗?

4

1 回答 1

1

CodeFluent 实体默认不生成索引。但是,您可以index="true"在属性上设置:

<cf:property name="Customer" index="true" />

并使用SQL Server Template EngineCodeFluent Entities 提供的模板"C:\Program Files (x86)\SoftFluent\CodeFluent\Modeler\Templates\SqlServer\[Template]CreateIndexes.sql"来创建索引。

如果您不想index=true在每个属性上添加,可以更改模板以自动包含所有属性,或者您可以编写一个方面来添加属性(这更复杂)。

另一种解决方案是使用 SQL 脚本:

DECLARE @SQL NVARCHAR(max) 
SET @SQL = '' 

SELECT @SQL = @SQL +
    'IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N''[dbo].[' + tab.name + ']'') AND name = N''IX_' + cols.name + ''')' + CHAR(13)+CHAR(10) + 
    'CREATE NONCLUSTERED INDEX [IX_' + cols.name + '] ON [dbo].[' + tab.name + ']( [' + cols.name + '] ASC ) ON [PRIMARY];' + CHAR(13)+CHAR(10)
FROM sys.foreign_keys keys
INNER JOIN sys.foreign_key_columns keyCols ON keys.object_id = keyCols.constraint_object_id
INNER JOIN sys.columns cols ON keyCols.parent_object_id = cols.object_id AND keyCols.parent_column_id = cols.column_id
INNER JOIN sys.tables tab ON keyCols.parent_object_id = tab.object_id
ORDER BY tab.name, cols.name

EXEC(@SQL)
于 2015-11-27T14:12:49.527 回答