2011-11-28 3 views
0

코드 첫 번째 방법으로 수행 할 것처럼 내 데이터베이스에 매핑되는 사용자 지정 Entity Framework (4.2) 엔터티를 만들려고합니다.엔터티 프레임 워크 : 데이터베이스 우선/코드 첫 번째 하이브리드

문제는 내 엔티티 프레임 워크 데이터 모델이 먼저 데이터베이스를 사용하고 있다는 것입니다.

엔터티 프레임 워크의 컨텍스트에 내 사용자 지정 엔터티를 추가하려면 어떻게합니까?

답변

1

데이터베이스에서 먼저 기존 데이터베이스에서 EDMX를 만들었다는 의미 인 경우 먼저 코드를 사용할 수 없습니다. 데이터베이스에서 테이블 및 업데이트 모델 (EDMX)을 만들어 EDMX에 포함시켜야합니다. 의견에 따라

편집 :

나는 기본적으로 사용자의 가벼운 버전이 될 것 BriefUser 실체를 만들려하지만 사용자의 외부 키에서 검색 특성을 가지고있다.

음이 가능합니다. 공통 클래스로 BriefUser를 만들고 쿼리에서 프로젝션을 사용할 수 있습니다. 좋아

public static IQueryable<BriefUser> ProjectUser(this IQueryable<User> query) 
{ 
    return query.Select(x => new BreifUser() 
          { // Fill BreifUser's properties here }); 
} 

및 사용 :

var briefUser = context.Users.ProjectUser().FirstOrDefault(...); 

을 "개체보기로 새 클래스를 정의 할 수도 있습니다

var breifUser = (from x in context.Users 
       where ... 
       select new BriefUser 
       { 
        // Fill BreifUser's properties here 
       }).FirstOrDefault(); 

당신은 재사용 가능한 확장 메서드로 이전 코드를 리팩토링 수 있습니다 ". 첫 번째 문제는 상속 또는 분할 같은 일부 고급 개념을 제외하고 각 테이블을 하나의 엔터티에만 매핑 할 수 있으므로 UserBriefUserUserTbl에 모두 매핑하면이 규칙을 위반하므로 BriefUser를 새 엔터티 유형으로 정의 할 수 없다는 것입니다. QueryView이라는 특별한 구조를 사용해야합니다.

QueryView은 매핑 수준에서보기입니다. EDMX의 MSL 부분에 직접 정의 된 기존 매핑 된 엔티티의 투영 인 새로운 매핑 된 유형을 생성 할 수 있습니다. 프로젝션은 사용자 지정 Entity SQL 쿼리로 정의됩니다. - 그것은 (내가 아니라 정말 기능 누락 고려) 집계를 지원하지 않습니다 예를 들어 그것은 모든 엔티티 SQL이 기능을 제공하지 않습니다

  • : 문제는 QueryView는 한계가 있다는 것입니다. 집계가 없다면 예를 들어 관련된 엔티티를 세는 속성을 포함하는 새로운 유형을 생성 할 수 없습니다.
  • 디자이너에서 지원되지 않습니다. QueryView을 정의하려면 EDMX를 XML로 편집해야하며 Entity SQL 쿼리를 직접 작성해야합니다.
  • 결과 유형은 "보기"이며 읽기 전용입니다.

은 내가 EDMX 파일을 유지뿐만 아니라, EF의 컨텍스트에 엔티티 (BriefUser)를 추가 할 수 있어야합니다.

이것은 불가능합니다.BreifUser은 프로젝션/뷰일 뿐이며 EF는 변경된 내용을 원본 테이블로 되돌릴 수 없으므로 BreifUser을 컨텍스트에 추가하고 유지할 수 없습니다. QueryView의 경우 BreifUser을 분해하고 모든 관련 테이블을 수정하는 방법이없는 사용자 지정 저장 프로 시저를 정의하면이 작업을 수행 할 수 있습니다. 이러한 저장 프로시 저는 EDMX로 가져와야하며 뷰 엔터티의 데이터 수정 작업에 매핑되어야합니다. Btw. EF가 모든 뷰를 읽기 전용으로 사용하기 때문에 엔티티를 데이터베이스 뷰에 맵핑 할 때도 마찬가지입니다.

+0

그래, 나는 EDMX를 가지고있다. 따라서 필자는 * 데이터 모델의 각 엔티티에 대해 테이블 ​​(또는 뷰)을 가져야합니까? 다른 개체의 속성에 매핑되는 속성을 가진 개체를 가질 수는 없습니다 (EF의 컨텍스트에서는 여전히 그렇습니다). –

+0

죄송합니다. 아마 당신의 질문을 이해하지 못했습니다. 그래서 당신은 정말로 무엇을하고 싶습니까? –

+0

내 데이터베이스에'UserTbl' 테이블이 있다고 가정 해 봅시다. 이'UserTbl' 테이블은 내 EDMX 파일의 EF 엔티티 ('User')에 매핑됩니다. 기본적으로'User'의 더 가벼운 버전 인'BriefUser' 엔티티를 만들고 싶지만'User'의 외래 키에서 속성을 가져올 것입니다. EDMX 파일을 유지하고 싶지만 엔티티 (BriefUser')를 EF의 컨텍스트에 추가 할 수 있어야합니다. 기본적으로 BriefUser와 User는 동일한 데이터에 매핑됩니다. - 데이터베이스에서 테이블이나 뷰를 만들지 않고도이 작업을 수행하고 싶습니다. –

관련 문제