使用 Fluent NHibernate 有条件地将两列映射到一个字段

Posted

技术标签:

【中文标题】使用 Fluent NHibernate 有条件地将两列映射到一个字段【英文标题】:Conditionally map two columns to one field with Fluent NHibernate 【发布时间】:2012-05-04 17:51:01 【问题描述】:

我有一个名为 Owner 的 NHibernate 实体,它在数据库中有一个 SSN 列和一个 TaxID 列,我想根据不同的属性,StructureType。因此,如果 StructureType 为“I”,我想将 SSN 值映射到通用属性,如果它的“C”我想将 TaxID 值映射到通用属性。这可能使用 Fluent NHibernate(甚至常规 NHibernate)吗? Owner 实体是只读实体,不会写回数据库。

【问题讨论】:

【参考方案1】:

我能够使用 Fluent NHibernate 中的公式解决此问题:

Map(x => x.Identification)
.Formula("CASE WHEN StructureType = 'I' THEN SSN ELSE TaxID END");

(在我原来的帖子中,我说它介于“I”和“C”之间,但实际上只是介于“I”和其他所有类型之间)

【讨论】:

【参考方案2】:

为什么不添加一个只读属性?

public string Identification

   get
   
       string identification = string.Empty;
       if (StructureType.Equals("I"))
           identification = SSN;
       else if (StructureType.Equals("C"))
           identification = TaxID;
       return identification;
   

【讨论】:

这行得通,不过我相信我已经找到了在 NHibernate 中执行此操作的方法,稍后我将在下面详细说明。 我能够使用 Fluent NHibernate 中的公式解决此问题: Map(x => x.Identification).Formula("CASE WHEN StructureType = 'I' THEN SSN ELSE TaxID END"); (在我原来的帖子中,我说它介于“I”和“C”之间,但实际上只是介于“I”和其他所有类型之间)

以上是关于使用 Fluent NHibernate 有条件地将两列映射到一个字段的主要内容,如果未能解决你的问题,请参考以下文章

Fluent NHibernate Composite Id 长度设置不正确

Fluent 映射和 NHibernate Xml 配置

NHibernate 2 + Fluent Nhibernate 中等信任

使用 Fluent NHibernate 映射泛型类

Fluent Nhibernate 映射多重连接

在使用fluent-nhibernate配置nhibernate时,为什么会出现MissingMethodException?