【EF Code First】 一对一、一对多的多重关系配置
生活随笔
收集整理的這篇文章主要介紹了
【EF Code First】 一对一、一对多的多重关系配置
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里使用相冊Album和圖片Picture的關系做示例
1,Album與Picture最基本的關系是1-n(一個相冊可以有多張圖片)
? ?這時Album、Picture實體類可以這么定義
/// <summary>/// 相冊/// </summary>public class Album{public int ID { get; set; }/// <summary>/// 標題/// </summary>public string Title { get; set; }public DateTime CreateTime { get; set; }/// <summary>/// 擁有者/// </summary>public virtual User Owner { get; set; } }/// <summary>/// 圖片/// </summary>public class Picture{public long ID { get; set; }public string Title { get; set; }public string Uri { get; set; }public DateTime CreateTime { get; set; }/// <summary>/// 所屬相冊/// </summary>public virtual Album Album { get; set; }}
生成的表結構
2,后來就要改需求了,相冊要加一個封面
于是Album與Picture的關系就加了一個1-1(一個相冊只有一個封面)
這樣就需要配置一下實體關系來區分屬性之間的關系
Album和Picture類做一些修改
?
/// <summary>/// 相冊/// </summary>public class Album{public int ID { get; set; }/// <summary>/// 標題/// </summary>public string Title { get; set; }public DateTime CreateTime { get; set; }/// <summary>/// 擁有者/// </summary>public virtual User Owner { get; set; }/// <summary>/// 封面/// </summary>public virtual Picture Cover { get; set; }/// <summary>/// 相冊下的圖片列表/// </summary>public virtual ICollection<Picture> Pictures { get; set; }}?
/// <summary>/// 圖片/// </summary>public class Picture{public long ID { get; set; }public string Title { get; set; }public string Uri { get; set; }public DateTime CreateTime { get; set; }/// <summary>/// 所屬相冊/// </summary>public virtual Album Album { get; set; }}
然后添加一個映射類
public class AlbumMap:EntityTypeConfiguration<Album>{public AlbumMap() {this.HasMany<Picture>(a => a.Pictures).WithRequired(p=>p.Album);}}EF上下文類中重寫方法
protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//移除復數表名的契約modelBuilder.Configurations.Add(new AlbumMap());}數據庫遷移時生成的代碼:
public partial class AlbumAddCover : DbMigration{public override void Up(){DropForeignKey("dbo.Picture", "Album_ID", "dbo.Album");DropIndex("dbo.Picture", new[] { "Album_ID" });AddColumn("dbo.Album", "Cover_ID", c => c.Long());AlterColumn("dbo.Picture", "Album_ID", c => c.Int(nullable: false));CreateIndex("dbo.Album", "Cover_ID");CreateIndex("dbo.Picture", "Album_ID");AddForeignKey("dbo.Album", "Cover_ID", "dbo.Picture", "ID");AddForeignKey("dbo.Picture", "Album_ID", "dbo.Album", "ID", cascadeDelete: true);}public override void Down(){DropForeignKey("dbo.Picture", "Album_ID", "dbo.Album");DropForeignKey("dbo.Album", "Cover_ID", "dbo.Picture");DropIndex("dbo.Picture", new[] { "Album_ID" });DropIndex("dbo.Album", new[] { "Cover_ID" });AlterColumn("dbo.Picture", "Album_ID", c => c.Int());DropColumn("dbo.Album", "Cover_ID");CreateIndex("dbo.Picture", "Album_ID");AddForeignKey("dbo.Picture", "Album_ID", "dbo.Album", "ID");}}最終表結構
?上一節:【EF Code First】 一對多、多對多的多重關系配置
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
轉載于:https://www.cnblogs.com/Sunlimi/p/4348299.html
總結
以上是生活随笔為你收集整理的【EF Code First】 一对一、一对多的多重关系配置的全部內容,希望文章能夠幫你解決所遇到的問題。