2013-02-06 104 views
6

時強調欄我有一個簡單的對象模型如下...實體框架創建數據庫生成

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

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

生成帶的EntityFramework結果在下面的架構基礎數據庫.. 。

產品

  • 產品編號
  • 類別編號
  • Category_CategoryId

分類

  • 類別編號

產品表中,CategoryId列始終設置爲0,而Category_CategoryId列包含產品所屬類別的ID。

如何使類別ID在的CategoryId列的產生進行設置,防止Category_CategoryId列?

回答

7

應用ForeignKey屬性爲CategoryCategoryId屬性。並更改CategoryId屬性類型以匹配CategoryIdCategory類(兩者均應爲long或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; } 
} 

OR

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

大眼睛!問題實際上是Category.CategoryId很長,而Product.CategoryId是一個int。一旦我更正了類型,CategoryId在這兩種情況下都很長,但模式生成按預期工作。 ForeignKey屬性不是必需的。 –

相關問題