У меня есть существующая база данных DB2 на моей работе. (По крайней мере, я думаю, что это DB2. Они называют ее «iSeries», и она выглядит и работает как DB2 на некотором оборудовании, похожем на мейнфрейм.) В течение многих лет разработчики .NET в моем отделе просто вручную писали команды и запросы ADO. для получения конкретных данных из конкретных таблиц и т. д.
На данный момент я создаю некоторую инфраструктуру, чтобы упростить разработку и поддержку нашего внутреннего программного обеспечения, и одна вещь, которую я хотел бы решить, — это доступ к данным. Я немного новичок в различных инструментах ORM, но я знаком с синтаксисом LINQ, и это то, к чему я хотел бы добраться. Вот что мы имеем прямо сейчас:
- Установленная база данных DB2 с множеством таблиц.
- Нет установленных бизнес-объектов в коде.
- Нет полезной связи между таблицами и любыми потенциальными бизнес-объектами.
Итак, что я пытаюсь сделать, так это создать уровень абстракции между кодом и базой данных DB2, где разработчики могут по существу делать то, что они уже делают (получать данные и заполнять пользовательский объект), только более плавно и эффективно. То есть вместо создания классических объектов ADO и заполнения набора данных просто напишите простую инструкцию LINQ, которая возвращает анонимный IQueryable с полями для заполнения пользовательского объекта. (В качестве дополнительного бонуса мне очень нравится идея ошибок времени компиляции, когда программисты что-то путают вместо ошибок времени выполнения, как это происходит, когда опечатка попадает в литерал командной строки SQL. Кроме того, даже не поймите меня начал с уязвимостей SQL-инъекций где-то здесь.)
Дело в том, что я пока не нашел способа сделать это. Вполне возможно, что я упускаю из виду что-то простое, и если это так, то я приветствую небольшой толчок в правильном направлении. Но в нынешнем виде все, что я нахожу в Интернете, подпадает под одну из следующих категорий:
- Да, ты можешь это сделать! Все, что вам нужно, это драйвер от IBM, для которого нет ссылки для скачивания!
- Вот удобный учебник по созданию отличного ORM для ваших бизнес-объектов, который создает базу данных с нуля. (В основном NHibernate, который было бы здорово использовать, если бы я мог использовать его для того, что я пытаюсь сделать.)
- Загрузите какой-нибудь инструмент и создайте свой ORM. (Инструмент не поддерживает DB2 или утверждает, что не поддерживает, когда я пытаюсь.)
Кто-нибудь сталкивался с чем-то подобным раньше? Я подхожу к этому совершенно неправильно? Любые советы по этому вопросу будут высоко оценены, спасибо.
Редактировать: я собираюсь пойти дальше и наградить это. Я разговаривал с некоторыми людьми, и мне кажется, что «это пока невозможно» — это все еще актуальный ответ, но если кто-то работал над этим и нашел решение, я бы хотел его услышать.
Обновление: благодаря приведенному ниже ответу за то, что он указал мне на проект DB_Linq. На самом деле мне не потребовалось много времени, чтобы добавить к этому базовую поддержку DB2, и теперь у меня есть проверенный и работающий поставщик LINQ to DB2! На данный момент это довольно просто и очень настроено для нашей среды, поэтому пока не планируется возвращать его обратно в проект. Но, надеюсь, со временем я смогу усовершенствовать свою вилку и отправить ее обратно. Спасибо!