Настраиваемые префиксы таблиц с .Net ИЛИ / М?

В веб-приложении, таком как вики, форумы или программное обеспечение для ведения блогов, часто бывает полезно хранить ваши данные в реляционной базе данных. Поскольку многие хостинговые компании предлагают единую базу данных со своими планами хостинга (с дополнительными базами данных, которые стоят дорого), это очень полезно для ваших пользователей, когда ваши объекты базы данных (таблицы, представления, ограничения и хранимые процедуры) имеют общий префикс. Для приложений, знающих о нехватке базы данных, характерно иметь жестко заданный префикс таблицы. Я хочу больше, однако. В частности, я хотел бы иметь префикс таблицы, который пользователи могут назначать, например, в файле 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? Есть ли возможность применить префикс таблицы помимо во время генерации кода?

14.08.2008 22:32:58
3 ОТВЕТА

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

1
14.08.2008 23:04:50

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

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

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

У тебя есть:

select * from clientA.Product
select * from clientB.Product
1
18.05.2012 21:46:19
РЕШЕНИЕ

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

2
28.08.2008 14:49:41