【问题标题】:Fluent Nhibernate AutoMapping Inheritance and Ignoring an Abstract PropertyFluent Nhibernate AutoMapping 继承和忽略抽象属性
【发布时间】:2011-01-26 20:14:33
【问题描述】:

我有一个成功映射的继承结构

产品(基础)

PdfProduct(继承自 Product)和 OtherProduct(继承自 Product)

这些工作正常,我之前用 hmb.xml 文件做过类似的事情。

在上一个项目中,当我试图找出产品是什么类型时遇到了问题,但我无法做到,因为它是代理(产品是 PdfProdcut)。

为了解决这个问题,我向基础产品添加了一个抽象属性,并在其他返回枚举器的类中覆盖了它。

当我使用 xml 映射执行此操作时,我根本没有映射 Type 列,一切都很好。

现在我正在尝试自动映射继承关系,它会自动将抽象属性映射到子类,但这不是必需的,因为它不在数据库中。

任何想法我如何告诉它忽略这些?由于子关系没有生成映射,因此我不确定将忽略语句放在哪里。

我们将不胜感激。

【问题讨论】:

    标签: nhibernate fluent-nhibernate automapping


    【解决方案1】:

    Fluent NHibernate 有一个可以在设置中使用的忽略属性方法:

    .ForTypesThatDeriveFrom<Product>(p => p.IgnoreProperty(x => x.Type))
    

    顺便说一句,我们通过在基类中添加一个 Self 属性解决了这个问题。此属性将始终返回正确的(非代理)类型:

        public virtual Product Self
        {
            get { return this; }
        }
    

    【讨论】:

    • 我已经添加了 self 属性,这很有效。我覆盖了产品映射以忽略自我。这是有效的,因为该属性在产品类中
    • 找不到 ForTypesThatDeriveFrom。当我用谷歌搜索时,看起来这是旧语法?
    • 如果我这样做 .Override(x => x.IgnoreProperty(y => y.Type)) 这不起作用。它仍然抱怨继承的类型
    • 如果我全部覆盖它们......它仍然抱怨 MySql.Data.MySqlClient.MySqlException: Unknown column 'this_.Type' in 'field list' 它只是映射它无论如何。但它不存在于数据库中。
    • 什么类有 ForTypesThatDeriveFrom 方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多