在Fluent NHibernate中,我如何映射以下域模型?

时间:2010-06-17 01:50:24

标签: c# fluent-nhibernate

我有一个看起来像这样的用户类

public class User
{
    public virtual int Id { get; set; }

    public virtual long ValueA { get; set; }

    public virtual int? ValueB { get; set; }
}

ValueA由系统自动分配。它用于映射到UserClass的查找。但是,如果ValueB的值存在,那么它将以不同的方式查找UserClass

现在,我处理它的方式是获取用户,然后每次执行单独的查找。

return user.ValueB.HasValue ? Find(user.ValueB.Value) : Find(user.ValueA);

有没有办法让Fluent NHibernate为我这样做,所以我可以将UserClass作为User类的属性而不必单独进行查找?我在想ComponentMap,但我不知道如何让它考虑到两个可能的查找值。

现在我能想到的唯一其他解决方案是将每个return语句包装在我的UserService类中,以便在返回用户之前分配用户级别,这不是我想要继续使用的解决方案。

public User Find(long valueA)
{
    // Get the user
    return AssignUserLevel(user);
}

public User AssignUserLevel(User user)
{
    // set the user level of the user
}

1 个答案:

答案 0 :(得分:0)

嗯,这是NHibernate无法处理的一些逻辑(ValueB覆盖ValueA),但你可以让它使用引用而不是使用ID来查找。

public class User
{
    public virtual int Id { get; set; }
    public virtual UserClass ValueA { get; set; }
    public virtual UserClass ValueB { get; set; }
    public virtual UserClass UserClass { get { return ValueB ?? ValueA; } }
}

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Table("MyUserTable");
        Id(user => user.Id).GeneratedBy.Identity();
        References(user => user.ValueA).Not.Nullable();
        References(user => user.ValueB).Nullable();
    }
}