2016-03-01 91 views
1
创建综合指数

我想创建一个使用CreateIndex()复合索引就像我可以为单个列索引,例如:与ServiceStack

db.CreateIndex<NetworkPart>(np => np.NetworkId); 

是,即使是有可能做到这一点?

我的类看起来是这样的,我想对已经存在的数据库表中创建新增加的综合指数:

[CompositeIndex(true, nameof(NetworkPart1), nameof(NetworkPart2))] 
public class NetworkPart 
{ 
    [Required] 
    [Index] 
    public Guid NetworkId { get; set; } 

    [Required] 
    public string NetworkPart1 { get; set; } 

    [Required] 
    public string NetworkPart2 { get; set; } 
} 

回答

1

到目前为止,我只看到做,而不需要额外的工具是这样的:

var createIndexStatements = db.GetDialectProvider().ToCreateIndexStatements(typeof(NetworkPart)); 
var createIndexStatement = createIndexStatements.FirstOrDefault(stmt => stmt.Contains("uidx_networkpart_networkpart1_networkpart2")); 
db.ExecuteSql(createIndexStatement); 
1

[CompositeIndex]属性仅用于定义OrmLite创建了db.CreateTable<T>表的定义,即它们不用于在运行时创建索引。

+1

我知道,但我加了这个指标已经创建了表之后。现在我需要“迁移”与已更改类相匹配的现有表。目前我这样做:var createIndexStatements = db.GetDialectProvider()。ToCreateIndexStatements(typeof(NetworkPart)); var createIndexStatement = createIndexStatements.FirstOrDefault(stmt => stmt.Contains(“uidx_networkpart_networkpart1_networkpart2”)); db.ExecuteSql(createIndexStatement);' – kabeleced

+1

[FluentMigrator](https://github.com/schambers/fluentmigrator)是这类任务的理想人选。 – labilbe

+0

@labilbe谢谢,但我想实现这一点,而不需要额外的工具。我可以使用ServiceStack的'CreateIndex()'在一列上添加一个索引,就像我想用一个组合索引一样。 – kabeleced