2014-03-05 4 views
0

레거시 데이터베이스에 대한 EF CodeFirst 매핑을 만들려고합니다. 나는 그들 사이의 매핑을 구성 할자식 및 루트 집계 간의 매핑

public class Subscriber 
{ 
    public Guid Id { get; set; } 
    public SubscriberAddress Address { get; set; } 
} 

public class SubscriberAddress 
{ 
    //[...] 
} 

:

내가 다음과 같은 클래스를 가지고 있다고 할 수 있습니다.

create table Subscriber 
(
    Id uniqueidentifier primary key, 
    -- [...] 
) 

create table SubscriberAddress 
(
    SubscriberId uniqueidentifier, 
    -- [...] 
) 

그래서 관계가 SubscriberAddress 테이블에 있지만 클래스에 나는 Subscriber 클래스의 속성으로 주소를 싶습니다처럼 표가 보인다.

WithRequiredPrincipalWithRequiredDependent으로 시도했지만 FK가 다른 테이블에 있으므로 매핑을 수행하는 방법을 이해할 수 없습니다.

SubscriberAddress 편집SubscriberSubscriber.Address는 선택 사항입니다 참조하는 속성이 없습니다.

+0

어떤 종류의 매핑을 찾고 계십니까? 1 대 1 또는 1 대 다수. 가입자의 주소가 선택 사항입니까 필수입니까? – Drauka

+0

일대일 매핑이고 SubscriberAddress는 선택 사항입니다. – jgauffin

답변

1

관계가 1 : 1이고 둘 다 필요하다고 가정하면이 방법이 효과적입니다.

public class SubscriberContext : DbContext 
{ 
    public DbSet<Subscriber> Subscribers { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //modelBuilder.Entity<Subscriber>().HasRequired(x => x.Address).WithRequiredPrincipal(x => x.Subscriber); 
     modelBuilder.Entity<Subscriber>().HasOptional(x => x.Address).WithRequired(x => x.Subscriber); 
     modelBuilder.Entity<SubscriberAddress>().Property(x => x.Id).HasColumnName("SubscriberId"); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

public class Subscriber 
{ 
    public Guid Id { get; set; } 
    public virtual SubscriberAddress Address { get; set; } 
} 

public class SubscriberAddress 
{ 
    public Guid Id { get; set; } 
    public virtual Subscriber Subscriber { get; set; } 
} 
+0

내 질문에 대한 업데이트보기. – jgauffin

+0

@jgauffin이 질문의 변경 사항을 반영하여 답변을 업데이트했습니다. 구독자 주소에 추가 된 구독자는 poco 클래스의 탐색 속성 일 뿐이며 데이터베이스 자체의 열을 나타내지는 않습니다. 위의 구현은 SubscriberAddress 클래스의 'Id'속성을 테이블의 기본 subscriberId에 매핑하고 테이블의 PK와 구독자의 FK와 동일한 필드를 사용합니다. – Drauka