2013-02-06 5 views
6

를 생성 할 때 다음과 같이 나는 간단한 개체 모델이 열을 강조엔티티 프레임 워크는 ... 데이터베이스

public class Product 
{ 
    public long ProductId { get; set; } 
    public int CategoryId { get; set; } 
    public Category Category { get; set; } 
} 

다음과 같은 스키마에 EntityFramework 결과와 기본 데이터베이스를 생성

public class Category 
{ 
    public long CategoryId { get; set; } 
    public List<Product> Products { get; set; } 
} 

만들어 .. .

제품
  • 제품 ID는
  • 카테고리 ID
  • 을 Category_CategoryId

카테고리 제품,321에서

  • 카테고리 ID

0 테이블의 경우 CategoryId 열은 항상 0으로 설정되고 Category_CategoryId 열에는 제품이 속한 카테고리의 ID가 포함됩니다.

어떻게 카테고리 ID가 생성되는 것을 Category_CategoryId 열을 카테고리 ID 열 설정 및 방지되도록합니까?

답변

7

Category 또는 CategoryId 속성에 ForeignKey 속성을 적용하십시오. CategoryId 속성 유형을 CategoryIdCategory 클래스 (모두 길거나 int 여야 함)와 일치하도록 변경하십시오.

public class Product 
{ 
    public long ProductId { get; set; } 
    public long CategoryId { get; set; } 
    [ForeignKey("CategoryId")] 
    public Category Category { get; set; } 
} 

public class Category 
{ 
    public long CategoryId { get; set; } 
    public List<Product> Products { get; set; } 
} 

또는

public class Product 
{ 
    public long ProductId { get; set; } 
    [ForeignKey("Category")] 
    public long CategoryId { get; set; } 
    public Category Category { get; set; } 
} 

당신은 유창 매핑을 통해 같은 수행 할 수 있습니다

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Product>() 
     .HasRequired(p => p.Category) 
     .WithMany(c => c.Products) 
     .HasForeignKey(p => p.CategoryId) 
     .WillCascadeOnDelete(false); 

    base.OnModelCreating(modelBuilder); 
} 
+1

큰 눈! 문제는 실제로 Product.CategoryId가 int 인 동안 Category.CategoryId는 오래되었습니다. CategoryId가 긴 경우 두 유형 모두에서 유형을 수정하면 스키마 생성이 예상대로 작동합니다. ForeignKey 특성이 필요하지 않았습니다. –

관련 문제