데이터베이스와 상호 작용하기 위해 엔티티 프레임 워크를 사용하는 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
개체를 반환합니다.
비슷한 개체 (SalesOrders
및 Jobs
)의 2 개 목록이 있으므로이 엔티티가 틀리면 엔티티 프레임 워크를 사용하는 대신 각 개체에 대해 CRUD 작업을 작성해야합니다.
예를 들어, 새로운 교대조를 추가 할 수있는 페이지가 있습니다. 그러나 Shifts
테이블은 클라이언트마다 다를 것이므로 클라이언트 테이블을 업데이트해야합니다. 그렇다면 교대를 사용할 수있는 코드를 작성하려면 어떻게해야합니까? 엔티티 프레임 워크를 새로운 클라이언트의 스키마로 스왑 아웃 할 수 있습니까? asp:ListView
을 데이터 바인딩하는 데 사용할 수있는 컬렉션에 교대조 같은 것이 필요합니다.
가장 효과적인 방법은 무엇입니까? 엔티티 프레임 워크를 어떻게 사용 하나 고객 스키마와 독립적이어서 많은 프로젝트 데이터베이스를 여러 데이터베이스에서 재사용 할 수 있습니까?
데이터베이스 간의 실제 차이점에 대해 자세히 설명해야합니다. –
2 명의 클라이언트가 있다고 가정 해 보겠습니다. 하나는 직원 테이블이 있고 다른 하나는 직원 테이블이 있습니다. 둘 다 비슷한 데이터이지만 열 이름이 다릅니다. 내 응용 프로그램의 경우 코드는 필드 수가 x 인 staff 객체로 작업해야합니다. 내 스태프 객체를 사용하여 프로그램을 작성하고 클라이언트 1의 엔티티 모델을 클라이언트 2의 엔티티 모델로 스왑 할 수 있습니까? 이는 모든 데이터베이스가 서로 다른 여러 클라이언트에 대해이 하나의 응용 프로그램을 사용할 수 있고 응용 프로그램에서 데이터를 직접 사용해야하는 것을 목표로합니다. 예. 일정 기간 동안 작동하지 않는 모든 직원을 반환하는 메소드 – nicholmikey
이것은 처음 접근법을 사용하고 유창한 구성 api를 조건부로 사용할 수있는 것처럼 들립니다 (client1 인 경우 client2). 유창한 API를 사용하면 매핑을 제어하고 어떤 클래스가 어떤 데이터베이스에 매핑되며 어떤 속성이 어떤 열에 매핑되는지 제어 할 수 있습니다. 나는 그것을 시도하지 않았지만 동일한 애플리케이션에서 여러 스키마를 대상으로하는 문제는 있어서는 안됩니다. –