2013-05-14 3 views
0

데이터베이스와 상호 작용하기 위해 엔티티 프레임 워크를 사용하는 asp.net 응용 프로그램이 있습니다.데이터베이스 스키마와 무관 한 응용 프로그램

지금 작업하고있는 새 버전에서는 비슷한 데이터이지만 다른 스키마를 가진 다양한 데이터베이스에서 사용할 수 있도록 데이터베이스와 응용 프로그램을 분리해야합니다. (가능은 신규 고객에 사용되는)

지금까지 내 방식이지만,

  • 나는 사용자 정의 개체를 썼다
  • 고객 데이터베이스에 의해 생성 된 데이터 엔티티 모델에서 개체가 그것은 잘못된 느낌 내 시스템에서 사용하는 것
  • 내 사용자 지정 개체를 반환하는 모든 데이터 작업을 설명하는 인터페이스를 작성했습니다.
  • 데이터베이스에 연결된 엔터티 프레임 워크에서 클라이언트의 개체를 가져 와서로드하는 인터페이스 구현을 작성했습니다. fi 내가 내 사용자 지정 개체에 원하는 필드.

이 두 세트의 비슷한 개체가 있습니다.

public List<Job> getJobs() 
{ 

    List<Job> jobs = new List<Job>(); 

    using (var context = new TBDIEntities.TBDIEntities()) 
    { 
     //get all future events that are not cancelled 
     List<SalesOrder> salesOrders = context.SalesOrders 
      .Where(c => c.EVENTCONFIRMATION != "CANCELLED" && c.FUNCTIONDATE >= DateTime.Now) 
      .ToList<SalesOrder>(); 

     jobs.AddRange(from order in salesOrders 
         let dateTime = order.FUNCTIONSTARTTIME 
         where dateTime != null 
         select new Job 
         { 
          Description = order.FUNCTIONTYPE, 
          StartTime = (DateTime)dateTime, 
          Id = order.SALESORDERREF_TXNID.ToString(), 
          ShiftGroups = new List<ShiftGroup>(), 
          Status = order.EVENTCONFIRMATION, 
          ShiftCount = (int)context.BSS_ShiftListView 
           .Count(c => c.SALESORDERREF_TXNID == order.SALESORDERREF_TXNID), 
          ConfirmedShifts = (int)context.BSS_ShiftListView 
           .Count(c => c.SALESORDERREF_TXNID == order.SALESORDERREF_TXNID && c.Confirmed != null), 
          Client = new Client { Name = order.CustomerRef_FullName } 
         }); 
    } 

    return jobs; 
} 

그래서, 새로운 컨텍스트를 만드는 salesOrders의 모음 (테이블 이름에서 무엇입니까 :

예, 여기 내 사용자 정의에 Job 오브젝트의 데이터를 클라이언트 데이터베이스에서 salesOrders를 얻고, 덤프 salesOrders에서 데이터를 가져 와서 새로운 Job 개체 (내 응용 프로그램과 상호 작용할 것이라고 쓴 개체)를 만들고 Job 개체를 반환합니다.

비슷한 개체 (SalesOrdersJobs)의 2 개 목록이 있으므로이 엔티티가 틀리면 엔티티 프레임 워크를 사용하는 대신 각 개체에 대해 CRUD 작업을 작성해야합니다.

예를 들어, 새로운 교대조를 추가 할 수있는 페이지가 있습니다. 그러나 Shifts 테이블은 클라이언트마다 다를 것이므로 클라이언트 테이블을 업데이트해야합니다. 그렇다면 교대를 사용할 수있는 코드를 작성하려면 어떻게해야합니까? 엔티티 프레임 워크를 새로운 클라이언트의 스키마로 스왑 아웃 할 수 있습니까? asp:ListView을 데이터 바인딩하는 데 사용할 수있는 컬렉션에 교대조 같은 것이 필요합니다.

가장 효과적인 방법은 무엇입니까? 엔티티 프레임 워크를 어떻게 사용 하나 고객 스키마와 독립적이어서 많은 프로젝트 데이터베이스를 여러 데이터베이스에서 재사용 할 수 있습니까?

+0

데이터베이스 간의 실제 차이점에 대해 자세히 설명해야합니다. –

+0

2 명의 클라이언트가 있다고 가정 해 보겠습니다. 하나는 직원 테이블이 있고 다른 하나는 직원 테이블이 있습니다. 둘 다 비슷한 데이터이지만 열 이름이 다릅니다. 내 응용 프로그램의 경우 코드는 필드 수가 x 인 staff 객체로 작업해야합니다. 내 스태프 객체를 사용하여 프로그램을 작성하고 클라이언트 1의 엔티티 모델을 클라이언트 2의 엔티티 모델로 스왑 할 수 있습니까? 이는 모든 데이터베이스가 서로 다른 여러 클라이언트에 대해이 하나의 응용 프로그램을 사용할 수 있고 응용 프로그램에서 데이터를 직접 사용해야하는 것을 목표로합니다. 예. 일정 기간 동안 작동하지 않는 모든 직원을 반환하는 메소드 – nicholmikey

+0

이것은 처음 접근법을 사용하고 유창한 구성 api를 조건부로 사용할 수있는 것처럼 들립니다 (client1 인 경우 client2). 유창한 API를 사용하면 매핑을 제어하고 어떤 클래스가 어떤 데이터베이스에 매핑되며 어떤 속성이 어떤 열에 매핑되는지 제어 할 수 있습니다. 나는 그것을 시도하지 않았지만 동일한 애플리케이션에서 여러 스키마를 대상으로하는 문제는 있어서는 안됩니다. –

답변

1

두 개의 유사한 객체가 실제 건축 레이어에 대해 서로 다른 두 가지 역할을 수행하며 중복되지는 않습니다. 작업중인 것은 도메인 모델 (SalesOrders), 데이터 전송 객체 및보기 모델 (Jobs)입니다. 따라서 실제로 3 세트의 객체로 끝날 수도 있습니다.

AutoMapper과 같은 도구는 지루한 객체 - 객체 매핑의 많은 부분을 없애줍니다.

관련 문제