【问题标题】:How to efficiently load an object model from a data store?如何有效地从数据存储中加载对象模型?
【发布时间】:2013-05-16 10:59:42
【问题描述】:

如果您愿意,请考虑具有OrderLines 集合属性的Order 类的示例。

public class Order
{
    public OrderLineCollection OrderLines { get; private set; }
}

现在考虑一个数据访问层,它返回 Order 对象的集合,而没有填充 OrderLines 属性(空集合)。

为了最大程度地减少到服务器的往返行程,系统将所有 Order 对象的 ID 传递给 DAL,DAL 一次性返回每个 Order 的 OrderLine 对象。业务规则层中的代码负责将正确的OrderLine 对象添加到正确的Order 对象中。

public class OrderDAL
{
    public IEnumerable<Order> GetOrdersByCustomer(int customerId)
    {
        ...
    }

    public IEnumerable<OrderLine> GetOrderLines(IEnumerable<int> orderIds)
    {
        ...
    }
}

这是做这种事情的一般方式(减少数据库往返)吗?

DAL 是否应负责返回完全填充的 Order 对象?

有更好的方法吗?

不,我不能在这个特定的实例中使用 ORM 工具!

【问题讨论】:

    标签: c# oop


    【解决方案1】:

    我没有。我不想在初始查询后返回商店检索更多数据。加载数据时,您(应该)知道要在什么环境下加载数据,因此您会事先知道要在什么“导航属性”或连接上创建。这样一来,您就可以获得所需的所有数据。

    然而,这是从无状态的角度来看的,因为我目前专注于 MVC 和实体框架。我想如果您正在创建一个会计程序,您可能有一个显示订单标题的订单屏幕和一个您想要显示所选订单详细信息的订单详细信息屏幕。所以在这种情况下,是的,只需要检索所选订单的 OrderLines 会很有用。

    像往常一样,答案是:视情况而定。

    不,我不能在这个特定的实例中使用 ORM 工具!

    为什么?

    【讨论】:

    • 感谢您的回答。我不能使用 ORM 工具,因为我只是在扩展一些遗留类。引入 ORM 工具需要的时间投入比管理层所允许的要多:(
    猜你喜欢
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多