2010-02-06 70 views
0

我想展示產品分類我測試兩種方法:1。 如何在EF中加載相關對象?

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

看看SQL事件探查器,你會看到第二個方法執行更多的SQL語句。它適用於所有類別,因此速度較慢。

你可以做到這一點,如:

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

無論您的解決方案採取許多數據從數據庫中。你只需要幾個字段,但需要整個實體。我的解決方案只需要所需的字段

+0

感謝這正是我正在尋找。 – ali62b 2010-02-06 13:45:37

相關問題