【问题标题】:How do I specify a multi-column index with Fluent NHibernate如何使用 Fluent NHibernate 指定多列索引
【发布时间】:2010-11-06 21:36:35
【问题描述】:

这里的目标是让我的完整数据库配置和模式生成由 fluent nhibernate 处理。

有没有办法使用 Fluent nhibernate 指定多列索引?

我了解您可以在单个属性/列上指定索引

像这样:

mapping.Map(x => x.ItemDt).Index("IX_DataTransferLog_ItemDt");

如何指定多个列?

如果这不可能,有没有办法将原始 SQL 语句添加到将在创建/更新架构后运行的配置中?

【问题讨论】:

    标签: nhibernate fluent-nhibernate indexing


    【解决方案1】:

    在 XML 映射中,这可以通过将具有相同名称的索引添加到需要在索引中的所有属性来实现:

    <property name="Name" index="MyIndex" />
    <property name="RunTimeInMinutes" index="MyIndex" />
    

    不幸的是,我目前没有任何项目可以使用 Fluent NHibernate 进行测试,但我认为这在 Fluent NHibernate 中的工作方式相同:

    mapping.Map(x => x.Name).Index("MyIndex");
    mapping.Map(x => x.RunTimeInMinutes).Index("MyIndex");
    

    如果这不起作用,您可以在映射的database-object 中添加创建索引所需的原始 SQL。 NHibernate 将在使用 SchemaExport 创建数据库时执行 SQL。我不知道是否有用于映射数据库对象的 Fluent 版本,但您可以使用 XML 映射 database-object 并将映射文件添加到 Fluent NHibernate 的配置中。

    【讨论】:

    • 我已经测试过了,这很有效:mapping.Map(x => x.Name).Index("MyIndex"); mapping.Map(x => x.RunTimeInMinutes).Index("MyIndex");
    • 已验证。我编写了索引并得到: USE [NhibernateDB] GO /****** 对象:索引 [IX_MyTable_ColumnA_And_ColumnB] 脚本日期:01/16/2012 17:26:57 ******/ CREATE NONCLUSTERED INDEX [ IX_MyTable_ColumnA_And_ColumnB] ON [dbo].[MyTable] ([ColumnA] ASC, [ColumnB] ASC) 去
    • 这是正确且好的,但是有没有一种简单的方法可以使索引唯一?
    • 找到了 - 使用 UniqueKey("MyIndex") 而不是 Idex("MyIndex")
    • 是否有可能通过 XML 映射为一列创建多个索引(例如 A 列和 B 列的多列索引,A 列的另一个索引)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    相关资源
    最近更新 更多