Когда Linq-to-SQL выполняет запрос? - PullRequest
3 голосов
/ 15 сентября 2011

Можете ли вы сказать мне, где Linq2SQL выполняет запрос к моему серверу sql?Я надеюсь, что это произойдет после того, как я сопоставлю свой доменный объект с именем Car.

public class Car
{
    public Guid CarId { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public int HorsePower { get; set; }
}

public class CarRepository
{
    private readonly MyDataContext _dc;

    private readonly Func<DbCar, Car> _mappedCar =
        c => new Car
                 {
                     CarId = c.CarId,
                     HorsePower = c.HorsePower,
                     Make = c.Make,
                     Model = c.Model,
                 };

    public CarRepository(MyDataContext dc)
    {
        _dc = dc;
    }

    public Car GetCar(Guid carId)
    {
        var car = _dc.GetTable<DbCar>()
            .Select(_mappedCar)
            .Single(c => c.CarId == carId);                

        return car;
    }        
}

1 Ответ

7 голосов
/ 15 сентября 2011

Это верно.Выполнение SQL-запроса откладывается до вызова Single().Вы можете подтвердить это, разбив запрос следующим образом и добавив точку останова:

var carQuery = _dc.GetTable<DbCar>().Select(_mappedCar)  // <= breakpoint
var car = carQuery.Single(c => c.CarId == carId);

Если вы запустите profiler для своей базы данных, вы должны увидеть, где выполняется запрос, когда выпошаговое выполнение кода.

Более подробная информация здесь: LINQ и отложенное выполнение

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