0

我正在尝试制作一张我不知道 NHibernate 是否支持的地图。

我有一个表 A,我在 Fluent NHibernate 中有一个映射。我有另一个名为 B 的表,我必须在其中搜索 A.Id 。如果我在此表中找到此 ID,则必须将类 A 的映射中的 bool 属性设置为 true,否则设置为 false。

在表 A 和表 B 之间,使用 HasOne 方法在映射中表示一对一的关系。问题是 HasOne 没有可用于将结果转换为 bool 属性的 CustomType 方法。

我也可以从映射中将值转换为位或整数,但我不知道该怎么做。

有谁知道这是否可行,如果可以,怎么做?

谢谢你,摩苏。

4

2 回答 2

1

为这种情况制定了公式

Map(x => x.BooleanProperty).Formula("SELECT true IF EXISTS (SELECT 1 FROM B WHERE B.A_id = Id)");

编辑:

另一种方法(未测试)

// public AMap()
Join("TableB", join =>
{
    join.KeyColumn("A_id");
    join.Optional();
    Map(x => x.BooleanPropery, "someBcolumn").Not.Insert().Not.Update().CustomType<NullToFalseElseTrue>();
});

// class A
public virtual bool BooleanPropery { get; private set; }
于 2011-10-14T14:24:16.377 回答
0

菲罗给出了正确的答案。然而,它的代码存在一个小问题,所以我也在回答我的问题以获得更多的可见性(而不是作为评论)。

Join("TableB", join =>
{
    join.KeyColumn("A_id");
    join.Optional();
    join.Map(x => x.BooleanPropery, "someBcolumn").Not.Insert().Not.Update().CustomType<NullToFalseElseTrue>();
}); 

差异很小但很重要。如果没有 Join 委托的第三行缺少的“join”,您就是在告诉 NHibernate,您正在将 A_ID 列映射到 BooleanProperty 而不是 B_Id,正如您所期望的那样。

于 2011-10-17T09:12:30.537 回答