如何在EF中加载相关对象?

时间:2010-02-06 08:29:17

标签: asp.net-mvc entity-framework

我想展示产品类别我测试了两种方法: 1。

public ActionResult Index()
    {
        NORTHWNDEntities _db = new NORTHWNDEntities();
        IList<ProductViewModel> pList = new List<ProductViewModel>();
        foreach (var p in _db.ProductSet.Include("Category"))
        {

            ProductViewModel p1 = new ProductViewModel(){Name = p.ProductName,Price =p.UnitPrice ?? 0,Category = p.Category.CategoryName};
            pList.Add(p1);
        }

        return View(pList);
    }

2

public ActionResult Index()
    {
        NORTHWNDEntities _db = new NORTHWNDEntities();
        IList<ProductViewModel> pList = new List<ProductViewModel>();
        foreach (var p in _db.ProductSet)
        {
            p.CategoryReference.Load();
            ProductViewModel p1 = new ProductViewModel(){Name = p.ProductName,Price =p.UnitPrice ?? 0,Category = p.Category.CategoryName};
            pList.Add(p1);
        }

        return View(pList);
    }

我喜欢第二种方式因为我讨厌魔术弦 我想知道还有其他方法吗?
哪个更好?

1 个答案:

答案 0 :(得分:1)

查看SQL事件探查器,您将看到第二个方法执行更多的sql语句。它适用于所有类别,因此速度较慢。

你可以这样做:

var pList = _db.ProductSet.Select(p =>  new ProductViewModel(){Name = p.ProductName,Price =p.UnitPrice ?? 0,Category = p.Category.CategoryName});

您的两个解决方案都会从数据库中获取许多数据。您只需要几个字段,但需要整个实体。我的解决方案只需要字段。