【问题标题】:Is there a Fluent NHibernate way to index all foreign keys without coding it?是否有一种流畅的 NHibernate 方法来索引所有外键而不对其进行编码?
【发布时间】:2013-01-17 03:14:28
【问题描述】:

这可能吗,可能有约定吗?我有数百个表和无数关系,我希望所有外键都被索引,我不想编写代码。

更新

在@Vadim 的帮助下,我能够做到这一点:

var fkIndexConvention = ConventionBuilder.Reference.Always(x =>
    x.Index(string.Format("ix{0}_{1}_{2}", x.Class.Name, x.Property.Name,
    Guid.NewGuid().ToString().Replace("-", string.Empty))));

...然后将其添加到我的流利配置中:

var fluent = Fluently.Configure(config)
    .Mappings(m => m.FluentMappings.Conventions.Add(fkIndexConvention));

...世界变得更美好了。

【问题讨论】:

    标签: c# nhibernate fluent-nhibernate conventions


    【解决方案1】:

    我假设您正在谈论使用 hbm2ddl 工具和 SchemaExport。

    您需要做的就是设置一个参考约定。由于IManyToOneInstance 隐藏了外键,您应该能够将实例转换为IManyToOneInspector

    ConventionBuilder.Reference.Always(x => x.Index(((IManyToOneInspector)x).ForeignKey + "Index"));
    

    【讨论】:

    • 在这种情况下,x.ForeignKey 是一个 void 方法,而不是一个属性。
    • @JeremyHolovacs 嗯,必须是您使用的 Fluent 版本。来自 github 的最新版本将 ForeignKey 作为字符串属性 github.com/jagregory/fluent-nhibernate/blob/master/src/…
    • 你确定这里的 lambda 表达式代表 IManyToOneInspector 吗?大约 3 到 4 个月前,我从 Nuget 中提取了我的库,而这段代码已有 2 年的历史了,这似乎很奇怪。
    • 啊,我明白了,看起来 IManyToOneInstance 隐藏了该属性。我想你可以投它。我修改了答案。
    • 这似乎可以构建,但添加约定表明外键名称适用于所有条目......所以这可能很接近,我可能只需要定义一个 fk 命名约定。
    猜你喜欢
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多