Если все базы данных одинаковы (по крайней мере, та часть, которая используется 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 будет работать с каждой базой данных точно так же.