nHibernate - 定义类(和表)时何时使用对象

时间:2011-04-04 14:55:10

标签: c# .net nhibernate

我最近一头扎进了一个大量使用nHibernate的项目。我已经掌握了很多概念来实现它们,但是我很难确定何时在定义不同表的类中使用与表相关的对象。

这只是我编写的一个非常基本的例子......我可以使用标准类型创建Order类(其中包含一个FK到StateID),但是从我所看到的,我也可以使用我的现有对象定义。例如,StateID可以是:

    // StateID int, NOT NULL
    private int _stateid;
    public virtual int StateID
    {
        get { return this._stateid; }
        set { this._stateid= value; }
    }

    // State Object
    private State _state;
    public virtual State State
    {
        get { return this._state; }
        set { this._state= value; }
    }

只有在存在需要级联更改的关系时才使用对象吗?我应该何时使用标准类型与基于表格的对象?如果我只使用对象的一个​​属性(如PK),那么使用对象似乎没有意义。当然,除非我需要轻松访问不同的财产。 IE:我可以使用Order.State.StateName来获取与订单表中的StateID关联的状态的名称。也许这就是它被使用的时候?

我没有像我希望的那样说出这个,但我认为它得到了一般性的问题。

1 个答案:

答案 0 :(得分:3)

您可以在属性lazy="proxy"的映射中定义State

<many-to-one name="State" class="State" lazy="proxy" ... />

如果执行此操作,将为仅包含Id的属性State创建代理。因此,只要您只访问Order.State.Id,它就不会从数据库中获取整个State对象。如果您执行访问State对象的任何其他属性,则NHiberate将自动从数据库中获取完整的State对象。