Возможна ли ленивая загрузка в dapper? И в чем разница между общим (POCO) и динамическим API?
у меня есть два вопроса о работе с dapper:
есть ли способ загрузить свойство навигационного ключа, например entity-framework (lazy-loading)?
в чем разница между
POCO serialization
иdynamic serialization
? что лучше? и как я могу использовать эту сериализацию?
3 ответов
есть ли способ загрузить свойство навигационного ключа, например entity-framework (lazy-loading)?
нет, Dapper-это библиотека прямого SQL, и именно поэтому она так смехотворно быстра. Вокруг автоматизированной загрузки нет накладных расходов. Однако можно загрузить несколько сущностей одновременно.
в чем разница между сериализацией POCO и динамической сериализацией? что лучше? и как я могу использовать это сериализация?
сериализация POCO более эффективна, потому что тип хорошо известен во время компиляции, динамическая сериализация немного дороже, потому что она должна оцениваться во время выполнения. В остальном разницы нет.
тем не менее, я бы рекомендовал Dapper выше все остальные библиотеки в любом месте. Это просто, быстро и чрезвычайно гибко. И поверьте, я использовал множество фреймворков и библиотек для доступ к данным.
посмотреть Multi Mapping и Несколько Результатов
1: нет; совсем нет, если вы не катите его полностью сами. Он намеренно минималистичен и детерминирован
2: материализация в POCO удобна, если вы хотите предоставить эти данные другим частям вашего приложения, например, как данные для модели представления;Query<Customer>
, например, может заселять известные Customer
объекты, которые вы можете код в других местах. dynamic
очень удобно, но не очень explorable - и не будет работать хорошо для привязки данных или IntelliSense. Это, однако, очень удобно для методов DAL, которые остаются очень локальными или example
var row = conn.Query("select qty, cost from parts where id = @id",
new { id }).Single();
int qty = row.qty;
decimal cost = row.cost;
// and off we go...
или:
var lookup = conn.Query("select id, name from somelookup").ToDictionary(
x => (int)x.id, x => (string)x.name);
насколько я знаю, в dapper нет ленивой поддержки загрузки, если вы не создадите что-то с помощью Lazy<T>
класса .Нет.
сериализация POCO-это то, где вы определяете класс, и экземпляры этого используются для добавления/редактирования/чтения строк из таблицы.
динамическая сериализация-это то, где вы используете dynamic
объекты в .NET (где вы не определяете классы).
Dynamic будет быстрее идти, хотя у вас не будет intelisense или безопасности типа. POCOs потребуется немного больше времени для настройки (так как вам нужно создать каждый класс, который вы хотите использовать), но вы сохраняете безопасность типов и intelisense.