2013-02-06 31 views
6

Tôi có một mô hình đối tượng đơn giản như sau ...Entity Framework tạo gạch chân cột khi tạo cơ sở dữ liệu

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; } 
} 

Tạo cơ sở dữ liệu cơ bản với kết quả EntityFramework trong lược đồ sau .. .

Sản phẩm

  • ProductID
  • CategoryID
  • Category_CategoryId

Categories

  • CategoryID

Trong Sản phẩm bảng, cột Danh mụcId luôn được đặt thành 0 trong khi cột Danh mục_CategoryId chứa id của danh mục sản phẩm thuộc về.

Làm thế nào để làm cho id danh mục được thiết lập trong CategoryID cột và ngăn chặn sự Category_CategoryId cột từ được tạo ra?

Trả lời

7

Áp dụng ForeignKey thuộc tính cho Category HOẶC CategoryId thuộc tính. Và thay đổi CategoryId loại thuộc tính để khớp với CategoryId của lớp Category (cả hai phải dài hoặc 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; } 
} 

HOẶC

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

Bạn có thể làm tương tự qua bản đồ thành thạo:

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

lớn mắt! Vấn đề thực sự là Category.CategoryId là một Product.CategoryId trong một thời gian dài là một int. Khi tôi đã sửa kiểu này thành CategoryId là một trường hợp dài trong cả hai trường hợp, việc tạo lược đồ đã hoạt động như mong đợi. Thuộc tính ForeignKey là không cần thiết. –

Các vấn đề liên quan