【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】 一对一、一对多的多重关系配置相关推荐
- SQLAlchemy_定义(一对一/一对多/多对多)关系
SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...
- EF Code First 学习笔记:关系
一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性.导航属性等检测到模型之间的 ...
- EF Code First 学习笔记:关系(转)
一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性.导航属性等检测到模型之 ...
- mybatis的一对一 一对多 多对多
mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...
- EF架构~单表一对多集合的插入(树型结构)
单表一对多关系很常见,它是一种树形结构,如系统菜单表,部门表,分类表,这些都可以做成单表一对多关系,而这些表做成一对多关系后,如果通过EntityFramework进行插入操作时,会很方便,EF会自动 ...
- EF Code First Migrations数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多
7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...
- 直播平台千千万,一对一/一对多直播源码快速搭建的终极秘密
直播平台千千万,一对一/一对多直播源码快速搭建的终极秘密 初创公司如果打算自建视频直播平台,其实技术研发成本比较高,由于目前直播技术相对都比较成熟,设备也都支持硬编码,建议可以自主购买一整套的程序源码 ...
最新文章
- 你想要的生信知识全在这——生信宝典目录 (181202)
- 3dContactPointAnnotationTool开发日志(二一)
- pythonenumapi_Python调用windows API实现屏幕截图
- 1266: [AHOI2006]上学路线route
- 大数据图数据库之数据分片
- 交换机工作原理_交换机的作用是什么?
- 借助拳王虚拟项目公社,自动发货系统,卖虚拟教程产品,实现全自动化赚钱的秘密
- 理解 Delphi 的类(十) - 深入方法[21] - 开放数组参数
- 《Unity虚拟现实开发实战》——第1章,第3.1节虚拟现实设备集成的软件
- css设置背景透明度
- 史上最给力客厅风水 让你躲过血光之灾
- 电视机和机顶盒等焦点问题
- python路径、工作路径、文件路径问题、改变当前路径
- 更改tomcat访问端口()
- AI基础实战营打卡笔记
- 你想知道的2022年广东PMP考试报名时间来咯!
- python----模块和包
- Tecent校招面试
- 如何安装低版本的 iTunes 在 macOS Mojave
- ETL开发流程小记(1)