这里使用相册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】 一对一、一对多的多重关系配置相关推荐

  1. SQLAlchemy_定义(一对一/一对多/多对多)关系

    SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...

  2. EF Code First 学习笔记:关系

    一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性.导航属性等检测到模型之间的 ...

  3. EF Code First 学习笔记:关系(转)

      一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性.导航属性等检测到模型之 ...

  4. mybatis的一对一 一对多 多对多

    mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...

  5. EF架构~单表一对多集合的插入(树型结构)

    单表一对多关系很常见,它是一种树形结构,如系统菜单表,部门表,分类表,这些都可以做成单表一对多关系,而这些表做成一对多关系后,如果通过EntityFramework进行插入操作时,会很方便,EF会自动 ...

  6. EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  7. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  8. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多

    7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...

  9. 直播平台千千万,一对一/一对多直播源码快速搭建的终极秘密

    直播平台千千万,一对一/一对多直播源码快速搭建的终极秘密 初创公司如果打算自建视频直播平台,其实技术研发成本比较高,由于目前直播技术相对都比较成熟,设备也都支持硬编码,建议可以自主购买一整套的程序源码 ...

最新文章

  1. 你想要的生信知识全在这——生信宝典目录 (181202)
  2. 3dContactPointAnnotationTool开发日志(二一)
  3. pythonenumapi_Python调用windows API实现屏幕截图
  4. 1266: [AHOI2006]上学路线route
  5. 大数据图数据库之数据分片
  6. 交换机工作原理_交换机的作用是什么?
  7. 借助拳王虚拟项目公社,自动发货系统,卖虚拟教程产品,实现全自动化赚钱的秘密
  8. 理解 Delphi 的类(十) - 深入方法[21] - 开放数组参数
  9. 《Unity虚拟现实开发实战》——第1章,第3.1节虚拟现实设备集成的软件
  10. css设置背景透明度
  11. 史上最给力客厅风水 让你躲过血光之灾
  12. 电视机和机顶盒等焦点问题
  13. python路径、工作路径、文件路径问题、改变当前路径
  14. 更改tomcat访问端口()
  15. AI基础实战营打卡笔记
  16. 你想知道的2022年广东PMP考试报名时间来咯!
  17. python----模块和包
  18. Tecent校招面试
  19. 如何安装低版本的 iTunes 在 macOS Mojave
  20. ETL开发流程小记(1)

热门文章

  1. matlab练习程序(并行计算)
  2. 重新学习web后端开发-002-hello, world
  3. C# 3.0下有限状态机的一种优雅的实现
  4. AspNetPager 样式以及使用(漂亮)
  5. 关于querySelector 和 document.getElementsByTagName 选中集合问题
  6. NSArray基础-数组排序
  7. zigbee协议栈学习(二)
  8. 在Asp.net中使用JQuery插件之jTip
  9. 关于Update语句在不同数据库中的差别
  10. AngularJS跨域问题 ajax 跨域