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

标签 c# .net nhibernate

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

这只是我编写的一个非常基本的示例...我可以使用标准类型创建 Order 类(其中包含 StateID 的 FK),但从我所看到的来看,我也可以使用我的订单中的现有对象定义。例如,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 关联的州的名称。也许这是使用的时候?

我的措辞没有达到我的预期,但我认为它解决了一般性问题。

最佳答案

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

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

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

关于c# - nHibernate - 定义类(和表)时何时使用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540294/

相关文章:

nhibernate - 如何在 NHibernate 中获取部分对象?

c# - 定时器写入数据库的后台任务

c# - 如何使用 C# 将 CSV 文件上传到 sql server 表?

c# - 单字节顺序

c# - 如何通过一次调用 Save 在 NHibernate 中更新一行并自动插入一个新行?

c# - 将 NHibernate 与 SQL Server 应用程序角色一起使用

c# - 通过代码隐藏中的数据表分页

c# - 在 C# 中将数据集发送到没有数据库连接的 Crystal 报表

c# - 如何在不下载内容的情况下执行 GET 请求?

c# - 动态创建 <Type> 的对象