2012-07-25 3 views
1

나는 다음과 같은 정의를 가진 두 개의 테이블이 : 내가 원하는 무엇협회 4.3

CREATE TABLE [dbo].[Shows] (
    [Id]    UNIQUEIDENTIFIER NOT NULL, 
    [Name]   NVARCHAR (1024) NOT NULL, 
    [Image]   NVARCHAR (1024) NULL, 
    [Description]  NTEXT   NULL, 
    [Seasons]   INT    NOT NULL, 
    [FacebookId]  BIGINT   NULL, 
    [BackgroundImage] NVARCHAR (200) NULL, 
    [TheTvDbId]  BIGINT   NULL, 
    [NetworkId]  UNIQUEIDENTIFIER NOT NULL, 
    CONSTRAINT [PK_Shows] PRIMARY KEY CLUSTERED ([Id] ASC), 
    CONSTRAINT [FK_Shows_ToNetworks] FOREIGN KEY ([NetworkId]) REFERENCES [dbo].[Networks] ([Id]) 
); 

     CREATE TABLE [dbo].[TheTvDb] 
    (
     [Id] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL, 
     [EntityId] UNIQUEIDENTIFIER NOT NULL, 
     [TheTvDbId] BIGINT NOT NULL, 
     [LastUpdated] BIGINT NOT NULL DEFAULT 0, 
     CONSTRAINT [AK_TheTvDb_EntityId] UNIQUE ([EntityId]), 
     CONSTRAINT [AK_TheTvDb_TheTvDbId] UNIQUE ([TheTvDbId]) 
    ) 

가 가리키는 Shows 테이블에 연관 속성 TheTvDbLastUpdated를 만드는 것입니다 표 TheTvDb의 재산 LastUpdated. TheTvDb 레코드와 Shows 레코드를 연결하는 키는 EntityId입니다. 관계는 일대일입니다. 나는 전체 TheTvDbTable에 연결될 협회를 만드는 방법을 알고 있지만 생성 된 엔티티 클래스에서 액세스하는 것이 더 편리하게 만들 수있는이 속성에만 연결하는 방법을 모른다. 감사.

저는 데이터베이스 우선 접근법을 사용합니다. 그래서 .edmx 파일의 설계자가 할 수있는 방법을 찾고 있습니다.

답변

1

그건 불가능합니다. 뭔가를 가리키는 속성은 참조/탐색 속성입니다. 스칼라/값 유형 탐색 속성을 만들 수 없습니다.

편리한 도우미는 읽기 전용 도우미 속성 수 있습니다 (하지 EDMX, 부분 클래스 파일에서 구현) : TheTvDbShow에서 TheTvDb에 일대일 탐색 속성 것

public partial class Show 
{ 
    public long TheTvDbLastUpdated { get { return this.TheTvDb.LastUpdated; } } 
} 

. 지연로드를 사용하는 경우이 등록 정보에 액세스하면 아직로드되지 않은 경우 데이터베이스에서 TheTvDb 엔티티가 먼저로드됩니다. 지연로드를 사용하지 않는 경우 TheTvDbnull 일 수 있으며이 속성에 액세스하면 예외가 발생합니다. 이에 대한 탐색 속성을 필요 어쨌든

public long TheTvDbLastUpdated 
{ 
    get 
    { 
     if (this.TheTvDb == null) 
      throw new InvalidOperationException(
       "TheTvDbLastUpdated cannot be accessed before TheTvDb is loaded."); 
     return this.TheTvDb.LastUpdated; 
    } 
} 

, 당신은 실제로 승리는 단지 하나의 점을 저장 (대신 show.TheTvDb.LastUpdatedshow.TheTvDbLastUpdated를 작성하는 경우는 큰 승리처럼 보이지 않는 : 당신은이 사건을 잡을 수).

+0

고맙습니다. –

1

대체 솔루션 - 먼저 데이터베이스를 사용하므로 투영을 제공하고 테이블 대신보기를 매핑하는 뷰를 만들면됩니다. 새 엔티티는 EF가보기 뒤에 숨겨진 원래 테이블을 업데이트하는 방법을 모르기 때문에 읽기 전용입니다.이 제한은 저장 프로 시저를 삽입, 업데이트 및 삭제 기능으로 매핑하여 해결할 수 있습니다. 기본 키가없는 테이블은 읽기 전용 EF에서 당신은 구축을 위해 노력하고 있습니다

  • 입니다 -

    보기도

    그것은 기본 키를 가지고 있지 않는 TheTvDb처럼 보이는
    • EF는 데이터베이스와 함께해야합니다 다른 문제를 해결할 수 있습니다 Shows.IdTheTvDb.EntityId 사이의 일대일 관계. 데이터베이스에서 EntityId에 대한 고유 제한 조건이 있기 때문에 관계가 일대일이지만 EF에서는 EF가 고유 제한 조건을 아직 지원하지 않기 때문에이 관계는 일대 다 일 수 있기 때문에