Есть ли какая-либо причина использовать LINQ to SQL, или я должен просто перейти к сущностям?
Я вряд ли объективен (как твердолобый пользователь LinqToSql), но это ответственно.
Технологии объектно-реляционного сопоставления - это попытки решить или уменьшить несоответствие объектно-реляционного импеданса. Это мосты между двумя мирами - объектным миром и миром реляционных данных.
И похоже, что разработчики этих мостов обычно называют ту или иную сторону домом.
LinqToSql - это ORM со стороны объекта. Он был разработан командой C # и позволяет вам использовать объекты для представления данных. В LinqToSql нет непрозрачных для компилятора строк, все запросы проверяются компилятором на соответствие.
EF - это ORM со стороны данных. Он был разработан командой ADO и позволяет вам использовать данные, представленные в виде объектов. В EF множество непрозрачных строк.
Запросы должны в конечном итоге выполняться для базы данных, и компилятор не может подтвердить, что база данных, доступная во время выполнения, соответствует отображению (true в любом ORM). Из-за этой реальности мира данных команда данных не так ценит гарантии компилятора, как команда C #.
Проработав долгие годы в бэкэнде TSQL без защиты компилятора, я очень ценю любую помощь, которую компилятор мне предоставит. И поэтому я присоединяюсь к команде C # по этому вопросу.
Например, загрузка Клиента его Заказами.
//linq to sql.
DataLoadOptions load = new DataLoadOptions();
load.LoadWith<Customer>(c => c.Orders); //<-- strong typed
myDataContext.LoadOptions = load;
IQueryable<Customer> query = myDataContext.Customers
.Where(c => c.CustomerId == 1);
//entity framework
IQueryable<Customer> query = myObjectContext.Customers
.Include("Orders") // <-- opaque string
.Where(c => c.Customer.Id == 1);