流利的NHibernate - 将2个相同的类映射到同一个表

时间:2011-01-10 04:02:27

标签: nhibernate fluent-nhibernate readonly

我曾经看过这个(未答复的)问题,但是在不同的背景下。我希望有两个域对象映射到同一个表,没有鉴别器。这两个类是:

public class Category
{
    public virtual int Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual ReadOnlyCategory ParentCategory { get; private set; }
}

public class ReadOnlyCategory
{
    public virtual int Id { get; private set; }
    public virtual string Name { get; private set; }
    public virtual ReadOnlyCategory ParentCategory { get; private set; }
}

主要区别在于ReadOnlyCategory的所有公共属性都是只读的。我的想法是,我希望这个类的所有用户都知道他们应该只弄乱他们当前“看”的类别,而不是层次结构中的任何其他类别。 (我已经离开了关于子类别的其他属性。)

显然,在数据库中,Category和ReadOnlyCategory是相同的东西,NHibernate在持久化时应该非常相似地对待它们。这里有三个问题:

1)如何进行映射?

2)实例化对象时,如何控制是否实例化Category或ReadOnlyCategory?

3)当持久化对象时,映射是否足够智能,或者我是否需要在这里使用可扩展点?

关于如何实现这一点的任何指示?

(或者我疯了吗?)

1 个答案:

答案 0 :(得分:0)

这对我来说看起来像是错误的对象模型设计。我没有看到出于授权原因引入新类的充分理由(用户是否允许修改给定的类别对象?)。如果最终用户不应该修改类别,你可以使用一个类并抛出例如InvalidOperationException。