2011-01-21 2 views
3

Я делаю свою первую программу базы данных с помощью Sql Express. В настоящее время я использую Linq-to-Sql для доступа к данным, а мои классы репозитория возвращают объекты типа «сущность». Имея в виду; Я расширяю классы сущностей dbml для использования в качестве классов бизнес-объектов. Теперь я хочу сделать это более разделенным; и имеют объекты POCO bussiness.Репозиторий; Сопоставление между классами объектов POCOs/Linq-to-Sql

Здесь я задаюсь вопросом, какие существуют различные решения. Мне кажется, что мне нужно вручную сопоставить свойство по свойствам, каждый класс объектов в классе домена, в репозиториях. У меня до сих пор около 20 таблиц с общим количеством сто столбцов. Теперь .. Я просто хочу проверить, является ли это обычным/типичным подходом, который вы все еще используете? И если есть альтернативы без чрезмерной сложности, что бы это было?

ответ

0

AutoMapper - это хороший инструмент для использования преобразований класса в класс. Тем не менее, я думаю о DAL, который сочетает Linq2Sql и AutoMapper, и я думаю, почему бы просто не пойти с Fluent NHibernate? Он очень прост в настройке, работает практически с любой базой данных, включая SqlExpress, и есть поставщик Linq, который легко интегрируется. Все это бесплатный открытый исходный код и очень часто используется, поэтому имеется достаточная документация и поддержка.

Если вы хотите остановиться в Linq2Sql, но у вас есть более полнофункциональная модель домена, вы можете рассмотреть возможность получения вашей модели домена от DTO. Это позволит вам иметь бизнес-логику в домене со свойствами, переданными в DTO. Однако, поймите, что объекты Linq2SQL не смогут быть напрямую переданы объектам домена; вам понадобится конструктор в домене, который принимает DTO и копирует информацию в домен (требуется, по крайней мере, одностороннее отображение DTO в домен). Тем не менее, домен можно рассматривать как DTO (потому что класс всегда является его родителем), поэтому обратное преобразование не требуется; просто передайте класс домена в репозиторий, где он ожидает DTO.

+0

Да, мой план состоит в том, чтобы передать класс домена непосредственно в/из репозитория. Так что нет DTO, и никакой реальной POCO, если быть точным. ... Консенсус от всех обсуждений, которые я прочитал, кажется, указывает на то, что NHibernate не так прямо настроен. Поэтому я считаю это преждевременным и для меня. :) Но это хорошо. Моя цель заключается в том, чтобы знать, какие решения возможны. Так что это хорошая информация для меня! – bretddog

+0

NHibernate действительно не так уж плохо; его значительное увеличение сложности состоит в том, что для этого требуется набор сопоставлений объектов/схем, в отличие от Linq2SQL, для которого требуется только схема схемы, для которой она генерирует DTO. Настройка NHibernate для конкретного БД с учетом необходимых сопоставлений довольно проста. – KeithS

+0

Да, я посмотрел на некоторые примеры NHibernate. И по крайней мере на поверхности это выглядит легче, чем я думал. Чувствует себя как правильный шаг, поэтому я попробую. – bretddog

4

Перед созданием отображения вручную, взгляните на AutoMapper

AutoMapper является объектом-объектом картографа. Работа с объектным объектом работает , преобразуя входной объект одного типа в выходной объект другого типа. Что делает AutoMapper интересным является то, что он предоставляет некоторые интересных конвенции выйти грязную работу из выяснить, как типа карты А типа B. До тех пор, как тип B следует установленному конвенции AutoMapper в, почти нулевой конфигурации является необходимо было отобразить два типа.

+0

Спасибо! Может быть, это здорово. Но для меня кажется немного плохая документация. Подумайте о моем уровне, это даст дополнительные головные боли и проблемы. – bretddog

Смежные вопросы