2009-09-23 2 views
1

부모 테이블 (P)에 함께 24 개의 특정 테이블 (A1, A2, C3) 중 하나를 가리키는 유형 (8 개의 가능성)과 위치 (3 개의 가능성) 필드가있는 14 년 된 스키마로 작업하고 있습니다. A3, B1, B2, B3 ...)이 있으며, 모두 해당 유형에 대해 동일한 스키마가 있습니다.동일한 LINQ 2 SQL 테이블에 대해 Facade를 작성하려면 어떻게합니까?

특정 테이블에 액세스하는 일반적인 방법을 만들고 싶지만 제대로 작동하지 않는 것 같습니다.

부모 테이블이 문서라고하고 두 가지 유형의 특정 (NewLetter, CurrentLetter 및 HistoricLetters) 및 (NewBill, CurrentBill 및 HistoricBills)라고 가정 해 봅시다.

public interface ILetter 
{ 
    DateTime CreationDate { get; } 
} 

public interface IBill 
{ 
    DateTime BillDate { get; } 
} 

// The LINQ 2 SQL generated classes already implement the CreationDate property 
public partial class NewLetter : ILetter { } 
public partial class CurrentLetter : ILetter { } 
public partial class HistoricLetter : ILetter { } 

그럼 내 코드에서, 나는이 작업을 수행 할 수 있도록하고 싶습니다 : 비슷한

switch (type) 
{ 
    case 1: 
    Table<IBill> specificBill; 
    switch (location)  
    { 
     ... 
    } 

    case 2: 
    Table<ILetter> specificTable; 
    switch (location) 
    { 
     case 1: specificTable = dataContext.NewLetter as Table<ILetter>; break; 
     case 2: specificTable = dataContext.CurrentLetter ... 
     case 3: specificTable = dataContext.HistoricLetter ... 
     } 
} 

또는 무언가를. 불행히도 NewLetter가 ILetter를 구현하더라도 Table<NewLetter>Table<ILetter>으로 변환 할 수 없습니다. 이 주위에 어떤 방법이 있습니까? 나는 기본적으로 C#에서 뷰를 만들려고 노력하고 있는데, db 자체에서 뷰를 생성 할 수있는 권한이 없기 때문입니다.

답변

1

DataContext 원하는 테이블을 검색하는 일반적인 방법이

var table = dataContext.GetTable<NewLetter>(); 
var letters = 
    from letter in table 
    where ... 
    select letter as ILetter; 
0

Linq2SQL에서 상속을 살펴보십시오. 테이블에는 일종의 식별기 열/속성이 필요합니다.

var table = dataContext.GetTable<NewLetter>(); 

은 어쩌면 당신은 쿼리 재 작성이를 사용할 수 있습니다 :

+0

을 윌 업데이트 예를 들어 그 일? 나는 하나의 필드 대신에 두 개의 필드를 끄는 것처럼 보입니다. – Jedidja

+0

나는 상속에 대해 읽었으며이 상황을 위해 갈 길이 없다. Dynamic LINQ를 사용하면 GetTable()에서 작동하고 그에 대한 명령을 실행할 수 있습니다. – Jedidja

관련 문제