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

StackOverflow https://stackoverflow.com/questions/11740

  •  08-06-2019
  •  | 
  •  

Вопрос

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

Другие советы

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

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

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

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

У вас есть:

select * from clientA.Product
select * from clientB.Product
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top