Я искал простое решение для этого, изо всех сил пытаясь склониться к чему-то вроде NHibernate, но пока все, что я нашел, похоже, пытается решить немного другую проблему. Вот на что я смотрю в своем текущем проекте:
У нас есть база данных IBM iSeries в качестве основного репозитория для стороннего программного обеспечения, используемого для нашего основного бизнеса (финансового учреждения). Частью того, что делает моя команда, является написание приложений, которые каким-то образом сообщают или отключают большое количество этих данных. Раньше мы вручную создавали соединения ADO .NET (кстати, мы используем .NET 3.5 и Visual Studio 2008), вручную писали запросы и т. д.
В дальнейшем я хотел бы упростить процесс получения данных оттуда для команды разработчиков. Вместо того, чтобы создавать соединения и запросы и все такое каждый раз, я бы предпочел, чтобы разработчик мог просто сделать что-то вроде этого:
var something = (from t in TableName select t);
И, в идеале, они просто получат несколько сгенерированных сущностей IQueryable или IEnumerable. Это будет сделано внутри нового ядра домена, которое я создаю, где эти объекты будут жить, а приложения будут взаимодействовать с ним через уровень обслуживания запросов/ответов.
Несколько вещей, которые следует отметить:
- Сущности, соответствующие таблицам базы данных, должны быть сгенерированы один раз, и мы бы предпочли обновлять их вручную с течением времени. То есть, если столбцы/таблицы добавляются в базу данных, нам не нужно ничего делать. (Если некоторые из них будут удалены, конечно, это сломается, но это нормально.) Но если нам нужно использовать новый столбец, мы должны иметь возможность просто добавить его в нужный класс (ы) без необходимости повторного создания Все это.
- Все это должно быть только для SELECT. Мы не делаем полный DAL здесь, потому что мы не хотим иметь возможность сломать что-либо в базе данных (даже случайно).
- Нам не нужно какое-либо сопоставление между объектами домена и сгенерированными типами сущностей. Домен едва покрывает часть данных, которые там находятся, большая часть из них нам никогда не понадобится, и мы бы предпочли просто создавать повторно используемые карты вручную с течением времени. У меня уже есть логическое разделение для DAL, где мои классы «репозитория» возвращают объекты домена, я просто ищу лучшую альтернативу ручному ADO для использования внутри классов репозитория.
Какие-либо предложения? Кажется, что то, что я делаю, выходит за рамки обычного спроса на инструменты/учебники DAL/ORM в Интернете, и я ничего не смог найти. Или, может быть, я просто упускаю из виду что-то очевидное?
IDataReader/IDataRecord? - person Jeff Sternal   schedule 09.06.2010