Как я могу загрузить связанные объекты в EF? - PullRequest
0 голосов
/ 06 февраля 2010

Я хочу показать Категории продуктов Я тестирую два подхода: 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 Ответ

1 голос
/ 06 февраля 2010

Посмотрите на SQL Profiler, и вы увидите, что второй метод выполняет больше SQL-операторов. Он делает это для каждой категории, поэтому он медленнее.

Вы можете сделать это так:

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

Оба ваших решения берут много данных из базы данных. Вам нужно всего несколько полей, но взять целые объекты. Мое решение принимает только необходимые поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...