0

我正在使用實體框架,並希望初始化我的數據庫。如何使用代碼優先的實體框架初始化主鍵身份的DatabaseProduct?

我有3個班

  • 部門
  • 分類
  • 產品

我創建一個新的類從播種類DropCreateDatabaseIfModelChanges繼承數據庫。我很困惑在id列中做什麼,因爲它標記爲身份。

我班的邏輯是:

public class Product 
{ 
    [ScaffoldColumn(false)] 
    [Key()] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ProductID { get; set; } 

    [Required,StringLength(100),Display(Name="Name")] 
    public string ProductName { get; set; } 

    public int? CategoryID { get; set; } 
    public virtual Categories Category { get; set; } 
} 

public class Categories 
{ 
    [ScaffoldColumn(false)] 
    public int CategoryID { get; set; } 

    [Required, StringLength(100), Display(Name = "Name")] 
    public string CategoryName { get; set; } 

    [Display(Name = "Product Description")] 
    public string Description { get; set; } 
    public virtual ICollection<Product> Products { get; set; } 

    public int? DepartmentID { get; set; } 

    public virtual Department Department { get; set; } 
} 

public class ProductDatabaseInitializer:DropCreateDatabaseIfModelChanges<EwayContext> 
{ 
    protected override void Seed(EwayContext context) 
    { 
     base.Seed(context); 
    } 

    private static List<Categories> Categories() 
    { 
     var categories= new List<Categories> { 
      new Category{DepartmentId = //?? in what way map the items 
     }; 
    } 
} 

回答

0

可以,只要設置臨時密鑰,因爲他們也有獨到之處,臨時密鑰將他們保存,並且將身份被替換之前用來建立關係鑰匙保存後。

var department = new Department{ DepartmentID = 567 }; 
context.Departments.Add(department); 

var category = new Category { CategoryID = 1234, DepartmentID = 567 }; 
context.Categories.Add(category); 

var product = new Product { ProductID = 222, CategoryID = 1234 }; 
context.Products.Add(product); 

更多