2009-06-11 2 views
2

하나의 데이터베이스가 있고이 데이터베이스에는 모든 클라이언트의 일반 테이블 세트와 특정 클라이언트의 특정 테이블 세트가 있습니다.C# Linq : DataContexts를 병합 할 수 있습니까?

이제 모든 클라이언트에 일반적인 테이블 만 포함하는 기본 DataContext을 만든 다음 클라이언트에 특정한 테이블 만 포함하는 별도의 DataContext을 만듭니다.


가 하나의 맥락이되도록 DataContext들 "통합"의 종류 방법이 있나요? 그래서 클라이언트 A의 경우 일반 테이블과 특정 클라이언트 (두 개의 다른 DataContext에서 가져온 테이블)를 모두 포함하는 DataContext가 필요합니까?


[업데이트]

내가 생각하는 내가 할 수있는 내가 그것을 MyDataContext에서 상속 할 대신 내 DataContext에이 DataContext에서 상속시키는의 DataContext에의 부분 클래스에서이다; 그런 식으로 MyDataContext의 테이블과 다른 DataContext는 하나의 DataContext 클래스에서 사용할 수 있습니다.

이 접근 방식에 대해 어떻게 생각하십니까? 물론 이런 식으로 한 번에 두 개의 데이터 인터페이스 만 병합 할 수 있습니다 ...

답변

1

나는 이것을 프로 그레시 적으로 달성하기 위해 아무 것도 모릅니다.

이 목표를 달성하려면 디자인 패턴을 사용하는 것이 좋습니다. 리포지토리 패턴과 함께 패턴을 사용하면 모든 클라이언트 리포지토리가 상속하는 기본 인터페이스 리포지토리를 정의 할 수 있습니다. 그런 다음 각 클라이언트 저장소에 대해 특정 요구 사항을 확장합니다.

2

저는 Facade Pattern을 사용할 것입니다. 기본 DataContext를 사용자로부터 추상화하는 Facade Context를 만듭니다. 원하는 경우 기본 DataContext에서 상속 받아 메서드를 재정의 할 수 있습니다. 재정의 내에서 해당 DataContext에 전달할 수 있습니다.

+0

추상화를 위해 저장소의 infront 패턴을 사용합니다. 원하는 저장소를 파사드에 전달합니다. 그러나 제가 OP에서 모이는 것에서부터, 그는 클라이언트 DC가 어느 정도까지 합병하여베이스 DC가 제공하는 것을 확장 할 수 있도록 병합하고 싶습니다. 두 패턴 모두 실행 가능한 방향을 제공합니다. –

0

이미 알아 냈는지 모르겠지만 DataContexts를 병합하는 것은 좋은 생각이 아닙니다. 그 이유 중 큰 부분은 DataContext 개체에 내장 된 변경 내용 추적과 관련이 있습니다. 엔티티 객체를 분리하여 변경 사항이 겹치지 않는 한 번에 하나의 DataContext에만 영향을 미치도록 할 수 있다면 작동시킬 수는 있지만 그렇게 적은 보수만으로는 많은 어려움이있는 것처럼 보입니다.

리포지토리 패턴을 구현할 수 있지만 다른 DataContext로 만든 개체를 인식하지 못하는 한 DataContext에서 여전히 문제가 있습니다. 현재 작업중인 프로젝트는 하나의 DataContext만을 사용합니다. 데이터베이스는 약 75 개의 테이블을 가지고 있습니다 ... 일대일, 일대일 및 일대일 및 다 대다 관계가 있으며 아직 단일 DataContext를 사용하여 심각한 성능 또는 구현 문제에 부딪치지 않았습니다. . 파사드 패턴을 사용하면 효과가있을 수 있지만 다시 상호 작용할 수없는 여러 DataContext를 유지하는 것이 그만한 가치가 있는지 스스로에게 질문해야합니다.

예를 들어 고객 테이블과 주문 테이블이 있다고 가정 해 봅시다. Customer 테이블은 하나의 DataContext에 있고 Orders 테이블은 다른 테이블에 상주합니다. 관계는 0에서 많은 주문까지의 고객입니다. 별도의 DataContexts가 있기 때문에 쿼리의 하위 엔터티 개체를 직접 참조 할 수 있다고 생각하지 않습니다.따라서, 특정 고객의 주문을 얻기 위해, 당신은이 작업을 수행하도록 강요 할 수있다 : 대신의

var orders = DC2.Orders.Where(a => a.Customer_ID == (DC1.Customers.Where(a => a.Customer_ID == 7).Customer_ID); 

:

우리는 DataContexts에서 상속을 사용하여이를 달성
var orders = DC.Customers.Where(a => a.Customer_ID == 7).Select(a => a.Orders); 
0

, 우리가 사용하는 EF5을, fron-end 웹 프로젝트를위한 Code-First와 MVC4.

우리는 우리의 데이터베이스에 자신의 테이블 + 일반 테이블

public partial class Application1Context : CommonDataContext 
{ 
    //Your code 
} 

이들 각각 하나를 사용

public partial class CommonDataContext : DbContext 
{ 
    //Your code 
} 

그리고 여러 전문 데이터 컨텍스트를 모든 일반 테이블을 캡슐화하는 공통의 DataContext가 데이터 컨텍스트는 동일한 솔루션 내부의 별도 프로젝트에 있습니다. 도움이 되길 바랍니다.

관련 문제