ADO.NET Entity Framework, Northwind и Employee.Orders> 0 - PullRequest
0 голосов
/ 15 апреля 2009

Итак, я пытаюсь работать над примером приложения. Пытаюсь покопаться в ADO.NET Entity Framework. Я вернул сотрудника, используя метод с LINQ, как это:

    public IList<Employee> FindByLastName(string lastName)
    {
        IList<Employee> emps;
        var e = from emp in _ctx.Employees where emp.LastName == lastName select emp;
            emps = e.ToList<Employee>();
        return emps;
    } 

Затем в одном из моих юнит-тестов у меня есть emps [0] .Orders.Count> 0 , и это возвращается false. Таким образом, мое свойство Orders не загружается. Что я делаю неправильно?

UPDATE
Любые мысли о том, как вы включите это в этот Load () / Включить материал в шаблон хранилища?

Должен ли я сделать что-то нехорошее, как

public IList<Employee> GetEmployeeById(int id, bool includeOrders)
{

}

Ответы [ 2 ]

2 голосов
/ 15 апреля 2009

Используйте метод Включить , и вам может быть лучше написать запрос без linq, например:

public IList<Employee> FindByLastName(string lastName)    
{
    return _ctx.Employees
        .Include("Orders")
        .Where(emp => emp.LastName == lastName)
        .ToList();  
}
1 голос
/ 15 апреля 2009

У вас также есть возможность использовать оператор «Включить» для загрузки ваших заказов.

public IList<Employee> FindByLastName(string lastName)
{
    IList<Employee> emps;
    var e = from emp in _ctx.Employees.Include("Orders") where emp.LastName == lastName select emp;
        emps = e.ToList<Employee>();
    return emps;
}

Это приведет к более сложному соединению на стороне SQL, но оно имеет преимущество в виде одного посещения базы данных и меньшего объема записей, чем в примере Load (). Я попробую их обоих и посмотрю, что лучше для тебя.

...