Мне нравится «микро» подход Dapper, Massive, PetaPoco и т. Д., И мне нравится управлять SQL, который мы отправляем в базу данных, большую часть времени это относительно просто. Мне также нравится работать с POCO, однако, имея дело с несколько гибким дизайном схемы, вы часто сталкиваетесь с проблемами :)ORM для использования с базами данных с полугибким дизайном схемы
Предположим, у нас есть объект Person, который ВСЕГДА имеет следующие свойства.
- Id
- Имя
- Телефон
Но в некоторых случаях могут быть дополнительные свойства, такие как
- SpecialPhoneNumber
- VeryCustomValue
Мне бы очень хотелось, чтобы POCO с общими свойствами, которые, как мы знаем, всегда будут там. Но пусть другой доступен в коллекции ключей/ценностей.
Какой был бы лучший подход? И поддерживает ли какой-либо из упомянутых «mirco-orm's» это? Я посмотрел на них всех, но не нашел никаких признаков того, что они делают, но, может быть, я что-то упустил.
Можно ли сделать это непосредственно с помощью SqlDataReader? или будет ли производительность чтения сотен строк плохим при использовании отражения для создания объектов? У всех упомянутых орм, похоже, все хорошо, и я думаю, что использовать DataReader под ним.
Надеется, что вы можете помочь :)
EDIT: Я, вероятно, следую отметить, что мы не имеем никакого контроля над архитектурой приложения. Это ERP-решение, которое позволяет индивидуальному клиенту настраивать свое приложение и базовую базу данных. Добавление полей в приложение добавляет столбцы в базу данных. Плохо! чтобы не делать что понятно, в первую очередь
wow "также может выбирать динамические объекты, но в отличие от Massive он может выбирать только данные и не может вставлять, обновлять или удалять их". ничто не могло быть дальше истины. –
@SamSaffron: Я не использую Dapper, и я думал, что вспомнил, когда он был изначально выпущен только для выбранных данных. Я проверил документы, когда добавил Dapper к этому ответу, и из того, что я мог сказать, это все еще так. Теперь я вижу, что он может просто выполнить любой sql, но это было несколько скрыто на странице документа. Я отредактировал свой ответ, рассмотрев ваш комментарий. –
он вставляет просто отлично, из doco: http://code.google.com/p/dapper-dot-net/ «Выполнение команды, которая не возвращает результатов public static int Execute (это IDbConnection cnn, строка sql, объект param = null, транзакция SqlTransaction = null) ".. также см .: http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db- using-dapper Я работаю над улучшением wiki-файла dapper, но процесс медленный –