0

将以下Order对象视为实体框架实体。

Order如果我要将down的实例强制转换为IOrder,然后访问 上的Lines属性IOrder,这是否会导致虚拟OrderLines属性枚举并加载OrderLine数据库中的所有实体,从而返回内存中填充的 OrderLine 实体集合?

还是客户端代码只是获取对 OrderLines 集合的引用,一旦它被实际枚举(例如在 foreach 中),它将从数据库中加载实体?

    public interface IOrder
    {
        IEnumerable<OrderLine> Lines { get; }
    }

    public class Order : IOrder
    {
        public int OrderId { get; set; }



        public IEnumerable<OrderLine> Lines
        {
            get
            {
                return OrderLines;
            }
        }

        public virtual ICollection<OrderLine> OrderLines { get; set; }

        public Order()
        {
            OrderLines = new List<OrderLine>();
        }
    }
4

1 回答 1

0

它将返回对该OrderLines对象的引用,但公开为IEnumerable. 这意味着只有客户端代码中的枚举才会真正枚举集合。这是整个集合:linq 过滤器 ( Where) 和投影 ( Select) 不会被转换为 SQL。

请注意,这两者都不是所希望的。首先,上下文必须是活动的以允许延迟加载,其次,集合可能是“大”的(尽管订单行可能不是重点)。根据应用程序的类型,最好将预先填充的 OrderDto 对象传输给客户端。

于 2013-01-14T18:50:37.307 回答