LINQ to SQL DBML в центральной библиотеке классов - доступ к конкретной базе данных сайта - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть централизованная библиотека классов, которую используют многие мои сайты. У каждого сайта есть своя БД. Я хотел бы добавить функциональность LINQ to SQL к этой библиотеке классов, но таким образом, чтобы она обращалась к соответствующей базе данных сайта, вызывая ее.

Итак, если у меня есть сайты A, B и C, с базами данных dbA, dbB и dbC, все используют CentralLibrary.dll

Я бы хотел, чтобы CentralLibrary.dll использовал dbA при вызове сайта A, dbB при вызове сайта B ... и т. Д.

возможно? Я вижу жестко запрограммированные строки подключения в таких файлах, как settings.settings, settings.design.cs и сам файл DBML. Предположительно мне нужен способ их динамического изменения в зависимости от сайта с использованием библиотеки.

1 Ответ

1 голос
/ 28 февраля 2012

Если все базы данных одинаковы (по крайней мере, та часть, которая используется CentralLibrary), то вот что вы можете сделать.

Создайте один контекст LINQ и добавьте в него все необходимые объекты БД (убедитесь, что вы добавили только те объекты, которые являются общими для всех ваших БД). Вы можете сделать это либо в самой CentralLibrary, либо в любой dll, которая будет использоваться им. Тогда всякий раз, когда какой-либо конкретный сайт должен перейти в базу данных, он должен передать соответствующую строку подключения. Конечно, CentralLibary API должен уметь правильно его обрабатывать (здесь нужна какая-то инициализация).

Для подключения к базе данных CentralLibrary создаст контекст LINQ to SQL. Ключевым моментом является то, что LINQ генерирует конструктор для контекста данных, который принимает строку подключения в качестве параметра. Вот пример объявления в файле .designer.cs:

public SampleDataContext(string connection) : base(connection, mappingSource)

Если контекст данных создается с помощью этого конструктора, он игнорирует все жестко закодированные строки всякий раз, когда они объявляются (app.config, .designer.cs, settings и т. Д.). И теперь, после создания контекста данных, CentralLibrary будет работать с каждой базой данных точно так же.

...