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

C# nHibernate-定义类(和表)时何时使用对象,c#,.net,nhibernate,C#,.net,Nhibernate,我最近一头扎进了一个大量使用nHibernate的项目。我已经记下了很多概念来实现它们,但在定义不同表的类中,我很难确定何时使用和表相关的对象 这只是我编的一个非常基本的例子。。。我可以使用标准类型创建Order类(其中包含FK到StateID),但从我所看到的情况来看,我还可以在定义中使用现有对象。例如,StateID可以是: // StateID int, NOT NULL private int _stateid; public virtual int StateI

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

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

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

是否仅当存在需要级联更改的关系时才使用对象?什么时候应该使用标准类型与基于表的对象?如果我只使用对象的一个属性(如PK),那么使用对象似乎没有意义。当然,除非我需要方便地访问不同的属性。IE:我可以执行Order.State.StateName来获取与Order表中的StateID关联的州的名称。也许这就是它被使用的时候

我并没有像我希望的那样说得那么好,但我认为它解决了一般性问题。

您可以在属性的映射中定义
lazy=“proxy”

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


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

那么使用lazy=“proxy”和只需将其保存为包含StateID be的PK值的int?区别在于,在需要状态对象时,您不必显式地自己获取它。只需编写
Order.State.StateName
来获取名称,NHibernate就会自动为您获取信息。这很有意义。非常感谢。还有一件事——当我希望更改通过子对象传播时,我是否使用对象,或者这一切都基于xml映射和我的级联值,这会有区别吗?如果启用了
default lazy
,则不必显式指定相关对象是延迟加载的。事实上,这是最好的实践,因为NHibernate天生就是懒惰的
<many-to-one name="State" class="State" lazy="proxy" ... />