2012-11-08 3 views
2

내 모델의 다른 테이블/엔티티에 대해 다소 복잡한 논리를 수행하고 일련의 열을 노출하는 SQL Server 뷰를 만들었습니다. 이 열 중 하나만 제외하고 모두 간단한 유형 (bigints, nvarchars 등)이지만 하나는 내 모델 내의 복잡한 엔티티입니다.Entity Framework에서 뷰 사용 5 코드 우선

다음과 같이 나는이보기에 매핑 엔티티를 만들었습니다

public class NetworkSuppliersByClient : Entity, IKeyed<long> 
{ 
    public long NetworkSuppliersByClientId { get; set; } 

    public long NetworkId { get; set; } 
    public String NetworkName { get; set; } 
    public long OwningClientId { get; set; } 
    public long ClientId { get; set; } 
    public virtual Supplier Supplier { get; set; } 
    public bool PublicEntry { get; set; } 

    public long GetKey() 
    { 
     return NetworkSuppliersByClientId; 
    } 
} 

다른 엔티티를 포함하여, 모델 내의 기존 기업에 공급 엔트리 맵 자체가 복잡한 유형 인 볼 수 있듯이 (일명 테이블).

내가보기에서 읽을하려고 할 때이 오류가 있다는 것입니다이 문제는 "엔티티 타입 NetworkSuppliersByClient는 현재 컨텍스트에 대한 모델의 일부가 아닙니다.". 나는 DbSet 같은 맥락으로 개체를 등록하려고 할 때

, 나는 오류가 "가 데이터베이스에 이미 'NetworkSuppliersByClients를'라는 개체가 있습니다."GET이있는 테이블을 만들려고로 기존의 뷰와 같은 이름

예를 들어 시작할 때 테이블을 만들지 못하게하는 등의 방법이 있습니까? 아니면보기에서 읽을 수있는 더 좋은 방법이 있습니까?

+0

비슷한 문제가 있습니다. 이 하나를 해결하는 방법을 듣고 싶습니다 :) – amhed

답변

1

관심이있는 다른 사람에게 나는 그 문제를 그냥 밟았습니다.

필자는 공급 업체 엔티티를 프리미티브 long으로 반환하는 대신 Supplier 엔티티를 반환하려는 시도를 포기한 경우를 제외하고는보기 응답의 응답에 직접 NetworkSuppliersByClient (위 그림 참조) 엔티티를 매핑했습니다. 내가 걷고 등의 공급 업체 ID의 목록을했다하면

public class NetworkSuppliersByClient : Entity, IKeyed<long> 
{ 
    public long NetworkSuppliersByClientId { get; set; } 

    public long NetworkId { get; set; } 
    public String NetworkName { get; set; } 
    public long OwningClientId { get; set; } 
    public long ClientId { get; set; } 
    public long SupplierId { get; set; } <-- Long, rather than "Supplier" 
    public bool PublicEntry { get; set; } 

    public long GetKey() 
    { 
     return NetworkSuppliersByClientId; 
    } 
} 

나는 다음 실제 EF 엔티티와 공급 업체 모두를 반환합니다 (.Contains() 메소드를 사용) 후속 엔티티 프레임 워크 쿼리를 수행.

핵심은 DbContext 하위 클래스에 선언 된 DbSet 멤버로 존재하거나 실제로 기존 DbSet <>에있는 엔터티가 참조하는 엔터티 (위의 경우 NetworkSuppliersByClient)가 없어야한다는 것입니다. 이 규칙을 적용하면 Entity Framework는 시작할 때 테이블을 만들지 않으므로 이미 존재하는 뷰와 충돌하지 않아야합니다.

관련 문제