【问题标题】:Fluent NHibernate many to many convention for typeFluent NHibernate 多对多类型约定
【发布时间】:2009-02-13 15:42:35
【问题描述】:

我在 Fluent NHIbernate 中使用 AutoPersistenceModel 来映射我的所有实体,并且一切正常:D

但是,我的几个对象有

public virtual IList<Comment> Comments { get; set; }

在数据库中有一个单独的 cmets 表,每个带有上述代码的实体都有自己的 cmets 链接表。

目前我正在做的是:

public class ContractMappingOverride : IAutoMappingOverride<Contract>
{
    public void Override(AutoMap<Contract> mapping)
    {
        mapping.HasManyToMany(x => x.Comments)
            .WithTableName("Comment_Contract");

对于每个实体。

有没有什么方法可以设置一个约定,让所有到 IList 的映射都自动与上面的表名称约定一样多?

谢谢

安德鲁

【问题讨论】:

    标签: fluent-nhibernate


    【解决方案1】:

    我知道这不是你想听到的,但答案是否定的。

    在 Fluent NHibernate 的当前设计中,没有办法将约定应用于集合,同时了解它们正在使用的类型,您可以将某些东西应用于所有集合,而不取决于它们包含的类型。这是我们设计中的一个缺陷,我的目标是纠正它,但这是一个相当大的变化,所以它不会在一夜之间发生。

    我建议您与我们的mailing list 联系,我们通常会在那里发布更新。

    很抱歉,我无法提供更多帮助。

    【讨论】:

    • 很公平,感谢您提供的信息。我会查看源代码,看看是否可以将补丁放在一起,因为我真的很喜欢这个功能。
    • 我为这个问题添加了答案 James,如果我的假设是正确的或者我不在基地,如果您能添加评论,那就太好了。
    • 我认为非常有用的是拥有一个非通用版本的 Override。这样,通过使用反射来旋转属性,就可以相对容易地进行一些基于约定的覆盖。
    • @James 请在完成后更新答案。
    【解决方案2】:

    自从我使用 Fluent NHibernate 已经有一段时间了,现在我才刚刚重新开始使用它(哇,自 09 年初以来发生了很多变化!)我认为您现在问题的答案是肯定的您可以使用 OverideAll 功能做到这一点。

    查看 FNH wiki 上的 Overrides

    【讨论】:

    • 不幸的是,我认为 OverrideAll 只能(当前)用于忽略任何实体上的属性,而不是 Andrew 正在寻找的。​​span>
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多