Entity Framework Code First 模式-建立一對多聯系
阿新 • • 發佈:2017-09-28
red ring 運行 not 例子 rod str 外鍵 ted
一、建立一對多聯系
使用的例子為Product與Category,一個種類(Product)對應多個商品(Product)
1.外鍵列名默認約定
在“一”這邊的實體增加一個集合屬性(public virtual ICollection<Product> Products { get; set; }),在“多”這邊的實體增加兩個屬性(1.public int CategoryID { get; set; } 2.public virtual Category Category { get; set; })。其中Product實體的CategoryID要為Product實體的名字+ID(d)具體代碼如下:
public class Product { public int Id { get; set; } public string ProductName { get; set; } public decimal UnitPrice { get; set; } public int CategoryID { get; set; } public virtual Category Category { get; set; } }
public class Category {public int Id { get; set; } public string CategoryName { get; set; } public virtual ICollection<Product> Products { get; set; } }
運行後生成的表結構為:
2.使用Data Annotations方式
在“多”的一邊的實體的所加的兩個屬性中的任何一個添加屬性註解[ForeignKey("CatId")]
以下演示一種:
public int Id { get; set; } publicstring ProductName { get; set; } public decimal UnitPrice { get; set; } public int CatId { get; set; } [ForeignKey("CatId")] public virtual Category Category { get; set; }
運行後結果為:
註:ForeignKey("CatId")的CatId要與public int CatId { get; set; }裏的CatId一樣。
3.Fluent API方式
需要在DbEntity類中添加OnModelCreating方法
public class Category { public int Id { get; set; } public string CategoryName { get; set; } public virtual ICollection<Product> Products { get; set; } }
public class Product { public int Id { get; set; } public string ProductName { get; set; } public decimal UnitPrice { get; set; } public int CatId { get; set; } public virtual Category Category { get; set; } }
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Product>() .HasRequired(t => t.Category) .WithMany(t => t.Products) .HasForeignKey(d => d.CatId) .WillCascadeOnDelete(false);//禁用級聯刪除,默認是開啟的 }
運行後結果為:
Entity Framework Code First 模式-建立一對多聯系