Генерацию INSERT-инструкций в EF, а также как самостоятельно использовать SqlBulkCopy, я подробно рассматривал тут, если интересно: habrahabr.ru/post/251397
в OrmLite нет контекста/кэширования в принципе, а naming convention отличается от LINQ, как уже заметили в комментариях выше. Поэтому, SingleById и есть аналог FirstOrDefault, в обоих случаях будет сгенерирован схожий SQL. Вечером посмотрю точные SQL-запросы, если интересно.
Как вам должно быть известно, Find сначала ищет в контексте по Id, если не найдет — обращается к БД. Вот только в данном примере я сравнивал скорости отдельных и друг от друга независимых запросов к БД без участия кэширования. Следствие: в контексте в принципе не может быть объекта с тем же Id (создается контекст на запрос), поэтому использование Find бессмысленно.
Грамотно говоря, для большого графа объектов в контексте, использование Find может быть даже вредно, если заранее известно, что нужного объекта в контексте нет — эффективнее сразу использовать прямой запрос к БД.
Клюнул на репутацию ServiceStack, да и первое впечатление было целиком положительным: LINQ-подобные запросы, скорость… Про отечественные корни Linq2Db узнал только сейчас, спасибо. Было бы здорово видеть больше статей на подобную тему.
Дело вкуса. SqlBulkCopy подходящая технология, вдобавок обеспечивающая максимальную производительность. Т.к. она не выполняет SQL вообще, а работает напрямую с файловой структурой БД. Как мне кажется, написать сравнимый по скорости запрос вряд ли возможно физически, что и подтверждается сравнительными тестами из различных источников. С другой стороы, если конкретная задача хорошо ложится на вашу схему, то почему нет. Во многих случаях даже AddRange достаточно, а преждевременная оптимизация — зло.
Если парсинг приведет к выполнению INSERT запроса для каждой записи — то мы получим время выполнения на уровне AddRange, а то и выше, при этом трудоемкость реализации вырастает на порядки.
Развивать и держать на плаву планируете?
Интерес у меня отнюдь не праздный — обдумываю, стоит ли публиковать собственный похожий проект.
github.com/MikaelEliasson/EntityFramework.Utilities/blob/master/EntityFramework.Utilities/EntityFramework.Utilities/SqlQueryProvider.cs
Генерацию INSERT-инструкций в EF, а также как самостоятельно использовать SqlBulkCopy, я подробно рассматривал тут, если интересно: habrahabr.ru/post/251397
Грамотно говоря, для большого графа объектов в контексте, использование Find может быть даже вредно, если заранее известно, что нужного объекта в контексте нет — эффективнее сразу использовать прямой запрос к БД.