Чем заменить созданное вручную сопоставление ADO.NET POCO?

Я написал оболочку для DbProviderFactory ADO.NET, которую широко использую в своих приложениях. Я также написал много кода, который сопоставляет строки IDataReader с POCO. Однако, поскольку у меня есть тонны классов, все это становится занозой в заднице.

Я подумывал заменить всю бабу на микроформу вроде Петапоко. У меня есть несколько вопросов, хотя:

  1. У меня есть много POCO, которые содержат другие POCO в качестве свойств. Насколько хорошо Petapoco поддерживает это?
  2. Должен ли я использовать ORM, например Massive или Simple.Data, который возвращает динамический объект и сопоставляет его с POCO?
  3. Существуют ли какие-либо подходы, которые я могу использовать для полного сопоставления строк с POCO? Я не могу использовать инструменты, основанные на соглашениях, поскольку моя база данных не особенно согласуется с тем, как она спроектирована.

person ScottD    schedule 25.07.2012    source источник
comment
Между прочим, я не очень заинтересован в том, чтобы идти по пути полномасштабного ORM.   -  person ScottD    schedule 26.07.2012
comment
Dapper с легкостью поддерживает вложенные сопоставления (как и PetaPoco, судя по документации). До 3) — пока возвращаемые столбцы соответствуют свойству, Dapper может сопоставить его. Таким образом, вам не придется менять дизайн БД, а только запросы, если есть несоответствие столбца свойств.   -  person Alex    schedule 26.07.2012
comment
Что касается условности, то, вероятно, я добавлю поддержку нетрадиционной; см. stackoverflow.com/questions/ 11703600/   -  person Marc Gravell    schedule 29.07.2012


Ответы (3)


Как насчет использования генератора текстовых шаблонов/кода для создания легковесного сохраняемого слоя? У меня есть закаленный в боях проект с открытым исходным кодом под названием TextMetal для создания необходимого уровня сохраняемости на основе проверенных и истинные архитектурные решения. Единственное, чего не хватает, — это объектно-объектные отношения, но он поддерживает выражения запросов и хорошо работает с плохо спроектированными схемами данных.

Вы можете увидеть реальный проект, в котором используется указанный выше инструмент под названием Can Do It For.

Не стесняйтесь спрашивать меня о любых дизайнерских решениях, как только вы взглянете.

person Daniel P. Bullington    schedule 21.08.2012

Simple.Data автоматически преобразует свой динамический тип в статический. Он будет сопоставлять вложенные свойства, если они были загружены с помощью метода .With. Так например

Customer customer = db.Customer.WithOrders().Get(42);

будет заполнять свойство Orders объекта клиента.

person Mark Rendle    schedule 24.08.2012

Не могли бы вы использовать QueryFirst или изменить его? Он берет ваш sql и оборачивает его ванильным кодом ADO, сгенерированным во время разработки. Вы получаете свежие POCO из схемы результатов каждый раз, когда сохраняете файл. Кроме того, вы можете протестировать все запросы и повторно сгенерировать все оболочки с помощью параметра в меню инструментов. Это зависит от Sql Server и SqlClient, поэтому, если вы не внесете какие-либо изменения, вы потеряете DbProviderFactory.

person bbsimonbb    schedule 06.06.2016