nHibernate:如何映射可以是任何类型的属性?

Posted

技术标签:

【中文标题】nHibernate:如何映射可以是任何类型的属性?【英文标题】:nHibernate: How to map a property that can be of any type? 【发布时间】:2014-08-07 20:23:22 【问题描述】:

我有这样的课程:

public class Answer

    virtual public int Number  get; set; 
    virtual public object Value  get; set; 

Value 属性的类型为 object,因为对于是/否问题,它将保存 bool 值,对于选择题,它将保存 int 值,对于未决问题,它将保存持有string 值。

我打算将这样的类保存在 Microsoft SQL Server 2012 表中,即存储在 varbinary 列中的 Value(尚不确定这是个好主意)。

如何在 nHibernate 中映射这样的类?

提前致谢!

【问题讨论】:

所以我会确认你的 varbinary 不是一个好主意。请考虑根据以下 SO 问题的公认答案修改您的架构:***.com/questions/1764435/… 它对 3NF 更友好、更灵活,并且更容易映射到 .Net POCO。 @KyleHale:感谢链接凯尔,我想我已经有了答案。我会接受另一个,因为它遵循相同的想法,但非常感谢您的帮助! 【参考方案1】:

如果您确实只有三种不同的 Value 可能类型,请考虑创建四种不同的 Answer 类 - 一个基类 (Answer) 和三个子类(AnswerInt、AnswerString、AnswerBool)。然后,您可以执行标准映射技术之一 - 每层次结构表或每类表。

【讨论】:

以上是关于nHibernate:如何映射可以是任何类型的属性?的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate:映射具有属性的复杂值类型?

如何告诉 Fluent NHibernate 不要映射类属性

如何使用 NHibernate 联合子类映射抽象属性?

在 NHibernate 中查询未映射的列

如何查询 NHibernate 的特定类型?

NHibernate 映射关系