Это отличный вопрос.Я делал это раньше, за исключением того, что я не использовал поддоменов, я использовал разные URL, но они все еще использовали тот же код и базу данных.Мне нужен был способ более тесно интегрировать это с моим кодом LINQ to SQL без необходимости вводить предложения where для каждого из них.Вот что я сделал:
public static IEnumerable<T> GetDataByDomain<T>(
IQueryable<T> src) where T:IDbColumn
{
//1 == website1
//2 == website2
//3 == both
string url = HttpContext.Current.Request.Url.Host;
int i = url == "localhost"
|| url == "website1.com"
|| url == "www.website1.com" ? 1 : 2;
return src.Where(x => x.domainID == i|| x.domainID == 3);
}
В основном при запросе таблицы с LINQ to SQL у меня есть свое собственное предложение where.
Используется примерно так:
using (var db = new MyDataContext())
{
var items = Utility.GetDataByDomain(db.GetTable<Item>()).Where(x => x.isVisible);
}
Наконец, в каждой таблице, где у меня были данные, которые нужно было указать для одного веб-сайта или для обоих, я добавил столбец, который принял значение 1,2 или 3 (оба).Кроме того, в моем контексте данных LINQ я создал частичный класс и сослался на мой интерфейс:
public partial class Item : Utility.IDbColumn
{
}
Причина, по которой нам нужен следующий интерфейс, заключается в том, что первый метод принимает неизвестный тип, поэтому, очевидно, я не могу выбрать свойствоот неизвестного типа, если только я не скажу ему, что любой тип, который я передаю ему, зависит от интерфейса, который содержит это свойство.
Интерфейс:
public interface IDbColumn
{
int domainID { get; set; }
}
Это довольно интересная система, вероятно, можетсделали это разными способами.Построил его некоторое время назад, и он прекрасно работает.