Настраиваемые префиксы таблиц с помощью .Net OR/M?

В таких веб-приложениях, как вики, форумы или программы для ведения блогов, часто полезно хранить данные в реляционной базе данных. Поскольку многие хостинговые компании предлагают одну базу данных в рамках своих хостинг-планов (дополнительные базы данных стоят дополнительно), для пользователей очень удобно, когда объекты базы данных (таблицы, представления, ограничения и хранимые процедуры) имеют общий префикс. Обычно приложения, знающие о нехватке баз данных, имеют жестко заданный префикс таблиц. Однако я хочу большего. В частности, я хотел бы иметь префикс таблицы, который пользователи могут назначать—, скажем, в файле web.config (с соответствующим значением по умолчанию, конечно).

Поскольку я ненавижу кодировать CRUD операции вручную, я предпочитаю работать через компетентный OR/M и использовал (и наслаждался) LINQ to SQL, Subsonic, и ADO.Net. Однако в новом проекте я столкнулся с проблемой, когда нужно поместить префикс таблицы в файл web.config пользователя. Существуют ли какие-либо продукты OR/M на базе .Net, которые могут элегантно справиться с этим сценарием?

Лучшее, что я смог придумать на данный момент, это использование LINQ to SQL с внешним файлом отображения, который я должен как-то обновлять на основе пока еще гипотетического параметра web.config.

У кого-нибудь есть лучшее решение? Я пытался реализовать это в Entity Framework, но это быстро превратилось в беспорядок. (Из-за моего незнания EF? Возможно.) Как насчет SubSonic? Есть ли в нем возможность применять префикс таблиц не только во время генерации кода?

Решение

Сейчас я изучил, что нужно сделать для этого в Entity Framework и LINQ to SQL и задокументировал шаги, необходимые в каждом из них. Это намного длиннее, чем обычно бывают ответы здесь, поэтому я буду довольствоваться ссылкой на ответ, а не дублировать его здесь. Каждый из них относительно прост, но LINQ to SQL является более гибким решением, а также самым простым в применении.

Комментарии (0)

LightSpeed позволяет указать INamingStrategy, которая позволяет динамически разрешать имена таблиц во время выполнения.

Комментарии (0)

Вместо того, чтобы использовать префиксы таблиц, вместо этого есть пользователь приложения, который принадлежит к schema (в MS Sql 2005 или выше).

Это означает, что вместо:

select * from dbo.clientAProduct
select * from dbo.clientBroduct

Вы имеете:

select * from clientA.Product
select * from clientB.Product
Комментарии (0)