위대한 질문입니다. 나는 하위 도메인을 사용하지 않았다는 것을 제외하고는 다른 도메인의 URL을 사용했지만 동일한 코드와 데이터베이스를 사용하기 전에이 작업을 수행했습니다. 나는 각각에 where 절을 입력하지 않고도 LINQ와 SQL 코드를 조금 더 긴밀하게 통합하는 방법을 원했습니다. 다음은 내가 한 일입니다.
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; }
}
그것은 흥미로운 시스템의 종류이다, 아마 여러 가지 방법으로 그것을 할 수 있었다. 오래 전에 지어졌고 훌륭하게 작동합니다.