使用 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 长度设置不正确
NHibernate 2 + Fluent Nhibernate 中等信任
在使用fluent-nhibernate配置nhibernate时,为什么会出现MissingMethodException?