2011-03-22 8 views
31

MVC 3 응용 프로그램에서 엔터티 클래스를 만들었습니다. RegistryId라는 속성 중 하나는 외래 키뿐만 아니라 기본 키입니다. 외래 키뿐만 아니라 열 기본 키를 만들 수 있습니까? 나는 EF ORM 디자이너를 사용하지 않고있다. 나는 수업을 손으로 코딩하고있다.Entity Framework의 주/외래 키

답변

55

"EF ORM 디자이너를 사용하지 않는 것"이라고하면 EF 4.1의 새로운 DbContext API를 의미한다고 생각합니다. DbContext API가 아니라면 여전히 EDMX (디자이너)를 사용해야합니다.

당신은 사용할 수 있습니다 데이터 주석 (System.ComponentModel.DataAnnotations) : KeyAttributeForeignKeyAttribute :

public class Registry 
{ 
    public virtual int Id { get; set; } 
    public virtual MyEntity MyEntity { get; set; } 
} 

public class MyEntity 
{ 
    [Key, ForeignKey("Registry")] 
    public virtual int RegistryId { get; set; } 

    public virtual Registry Registry { get; set; } 
} 

아니면 유창 API (파생 맥락에서 OnModelCreating를 오버라이드)를 사용할 수 있습니다 :

(편집 : 유창지도했다 MyEntity 당신의 엔티티가

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<MyEntity>() 
       .HasKey(e => e.RegistryId); 
    modelBuilder.Entity<MyEntity>() 
       .Property(e => e.RegistryId) 
       .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
    modelBuilder.Entity<MyEntity>() 
       .HasRequired(e => e.Registry) 
       .WithRequiredDependent(r => r.MyEntity); 
} 

인 경우) 반전과 불완전 FK 및 Registry은 1 : 1 관계의 주체입니다.

+0

@Hi Ladislav : 일대 다 관계가 있다면 어떨까요? – DotnetSparrow

+1

MyEntity의 일대 다 기본 키가 외래 키가 될 수 없습니다. 다른 FK 속성이나 FK 속성이 없어야합니다. –

+0

@Ladislav : [Foreignkeyy ("")]를 사용하려고하면 열 이름을 묻습니다. 그 안에 레지스트리 또는 레지스트리 엔티티의 ID를 제공해야합니까? – DotnetSparrow

관련 문제