2010-02-06 5 views
0

Je veux montrer catégories de produits I tester deux approches: 1.Comment charger des objets associés dans 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); 
    } 

J'aime deuxième façon parce que je déteste les chaînes magiques.
Je veux savoir s'il existe une autre approche pour cela?
Et quel est le meilleur?

Répondre

1

Regardez SQL Profiler et vous verrez que la seconde méthode exécute plus d'instructions sql. Il le fait pour toutes les catégories, donc c'est plus lent.

Vous pouvez le faire comme:

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

deux de votre solution pour prendre de nombreuses données de base de données. Vous n'avez besoin que de quelques champs, mais prenez des entités entières. Ma solution ne prend que les champs nécessaires.

+0

Merci c'est exactement ce que je cherchais. – ali62b

Questions connexes