gpt4 book ai didi

fluent-nhibernate - 如何使用 fluent-nhibernate 更改多列索引中的列顺序?

转载 作者:行者123 更新时间:2023-12-04 14:21:00 34 4
gpt4 key购买 nike

如何更改多列索引中的列顺序?
IE:

mapping.References(x => x.SomeReference).SetAttribute("index", "IX_index");
mapping.Map(x => x.SomeField).SetAttribute("index", "IX_index");

产生以下架构:
create index IX_index on ApplicantProgramDatas (SomeField, SomeReferenceId)

但我想得到:
create index IX_index on ApplicantProgramDatas (SomeReferenceId, SomeField)

最佳答案

您可以使用 或 IauxiliaryDatabaseObject 在 NHibernate 中定义索引。

在 hbm.xml 文件中:

<hibernate-mapping xmlns="urn:nhiernate-mapping-2.2">
<database-object>
<create>VALID SQL</create>
<drop>VALID SQL</create>
</database-object>
</hibernate-mapping>

注意 可以在同一个 hbm.xml 文件中的类映射之前或之后,允许您将索引定义、触发器等与它们应用到的对象保持一致。

另一个选项是 NHibernate.Mapping.IAuxiliaryDatabaseObject:
namespace NHibernate.Mapping {
public interface IAuxiliaryDatabaseObject : IRelationalModel {
void AddDialectScope(string dialectName);
bool AppliesToDialect(Dialect dialect);
void SetParameterValues(IDictionary<string, string> parameters);
}
public interface IRelationalModel {
string SqlCreateString(Dialect dialect, IMapping p, string defaultCatalog, string defaultSchema);
string SqlDropString(Dialect dialect, string defaultCatalog, string defaultSchema);
}
}

鉴于您使用的是 Fluent NHibernate,IAuxiliaryDatabaseObject 可能更适合您。只需在构建时公开您的配置,然后调用:
var sqlCreate = "CREATION SCRIPT";
var sqlDrop = "DROP SCRIPT";
cfg.AddAuxiliaryDatabaseObject(new SimpleAuxiliaryDatabaseObject(sqlCreate, sqlDrop));

注意NHibernate.Mapping.SimpleAuxiliaryDatabaseObject 是 NHibernate 的一部分。如果您只需为数据库对象提供创建/删除脚本,您就不必自己编写它。

我快速浏览了 Fluent NHibernate 代码库,并没有看到对 IauxiliaryDatabaseObject 的任何直接支持。因此,这是公开您的配置对象并自己提供所有 IauxiliaryDatabaseObjects 的问题。编写一些代码来扫描映射程序集以查找实现 IuxiliaryDatabaseObject 的类型,然后对它们进行 foreach'ing 以传递给 cfg.AddAuxiliaryDatabaseObject(obj) 并不会太难。

您可以在 NHibernate 文档中找到有关辅助数据库对象的更多信息:

http://nhibernate.info/doc/nh/en/index.html#mapping-database-object

关于fluent-nhibernate - 如何使用 fluent-nhibernate 更改多列索引中的列顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875990/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com