EF Core一对多和多对多
1.Model配置
Entity Framework Core 提供了两种方式
A.使用 fluent API 配置模型
可在派生上下文中覆写 OnModelCreating
方法,并使用 ModelBuilder API
来配置模型。 此配置方法最为有效,并可在不修改实体类的情况下指定配置。 Fluent API 配置具有最高优先级,并将替代约定和数据注释。
class MyContext : DbContext{public DbSet<Blog> Blogs { get; set; }protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity<Blog>().Property(b => b.Url).IsRequired();}}
B.使用数据注释来配置模型
也可将特性(称为数据注释)应用于类和属性。 数据注释会替代约定,但会被 Fluent API 配置替代。
public class Blog{public int BlogId { get; set; }[Required]public string Url { get; set; }}
一对多
以city和Province为例,Province有多个city,而一个city只能有一个Province
using System;
using Microsoft.EntityFrameworkCore;namespace ASPNetEFFCore.Models
{public class MyContext:DbContext{public MyContext(DbContextOptions<MyContext> options):base(options){}protected override void OnModelCreating(ModelBuilder modelBuilder){//配置多对多 ,就是两个一对多,可以不写modelBuilder.Entity<City>().HasOne(city => city.Province).WithMany(x => x.Cities).HasForeignKey(city => .ProviceId);}public DbSet<Province> Provinces { get; set; }public DbSet<City> Cities { get; set; }}public class Province{public Province(){Cities = new List<City>();}public int Id { get; set; }public string Name { get; set; }public int Population { get; set; }public List<City> Cities { get; set; }}public class City{public int Id { get; set; }public string Name { get; set; }public string AreaCode { get; set; }public int ProviceId { get; set; }public Province Province { get; set; }public Mayor Mayor {get;set;}}
}
多对多
以city和company为例,一个city会有多个company,一个company在多个city都有多个分company
using System;
using Microsoft.EntityFrameworkCore;namespace ASPNetEFFCore.Models
{public class MyContext:DbContext{public MyContext(DbContextOptions<MyContext> options):base(options){}protected override void OnModelCreating(ModelBuilder modelBuilder){//使用x.CityId,x.CompanyId生成 cityCompany的联合主键//执行数据库迁移modelBuilder.Entity<CityCompany>().HasKey(x => new{x.CityId,x.CompanyId});//配置多对多 ,就是两个一对多,可以不写modelBuilder.Entity<CityCompany>().HasOne(x => x.City).WithMany(x=> x.CityCompany).HasForeignKey(x=>x.CityId);modelBuilder.Entity<CityCompany>().HasOne(x => x.Company).WithMany(x=> x.CityCompany).HasForeignKey(x=>x.CompanyId);}public DbSet<City> Cities { get; set; }public DbSet<CityCompany> cityCompanies {get;set;}}public class City{public City(){CityCompany = new List<CityCompany>();}public int Id { get; set; }public string Name { get; set; }public string AreaCode { get; set; }public int ProvinceId { get; set; }public Province Province { get; set; }//多对多映射public List<CityCompany> CityCompany {get;set;}}public class Company{public Company(){CityCompany = new List<CityCompany>();}public int Id {get;set;}public string Name {get;set;}public DateTime EstablishDate {get;set;}public string LegalPerson {get;set;}//多对多映射public List<CityCompany> CityCompany {get;set;}}//多对多中间modelpublic class CityCompany{public int CityId {get;set;}public City City{get;set;}public int CompanyId {get;set;} public Company Company {get;set;}}
}
最后执行迁移命令
EF Core一对多和多对多相关推荐
- EF CORE 一对多、多对多添加、修改
创建.net core 控制台应用程序: 项目文件结构: 添加如下NuGet包: Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore ...
- ef core中如何实现多对多的表映射关系
文档:https://docs.microsoft.com/en-us/ef/core/modeling/relationships class MyContext : DbContext{publi ...
- EF Core的学习之路01
本文章是我听B站杨中科的所做的笔记 杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili 什么时ORM 1.说明:本课程需要你有数据库.S ...
- EF里一对一、一对多、多对多关系的配置和级联删除
EF里一对一.一对多.多对多关系的配置和级联删除 本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个Per ...
- .net core Entity Framework 与 EF Core
重点讲 Entity Framework Core ! (一)Entity Framework 它是适用于.NET 的对象关系映射程序 (ORM),现在的EF6已经是久经沙场,并经历重重磨难,获得一致 ...
- [翻译 EF Core in Action 2.1] 设置一个图书销售网站的场景
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- 用ASP.NET Core MVC 和 EF Core 构建Web应用 (一)
系统必备 .NET Core 2.0.0 SDK 或更高版本. 已安装 ASP.NET 和 Web 开发工作负载的 Visual Studio 2017 15.3 版或更高版本. 创建Web应用程序 ...
- efcore 实体配置_C# 数据操作系列 - 7. EF Core 导航属性配置
在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑.在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等.这一篇将为大家细细分析一下,如何设 ...
- SqlServer一多一、一对多、多对多关系的设置
最近使用EF Core,使用的是DB First的模式.通过对数据表进行主外键的设置,实现实体类之间一对一.一对多.多对多的等关系模型.以下是Main.Main_Ext.Children三个表, Ma ...
最新文章
- Mybatis联合查询
- java读取mysql配置文件_一文读懂 MySQL 主从复制读写分离
- Linux中常见的环境变量笔记
- hexo github搭建博客常用的命令
- eclipse怎么显示代码行数
- 深入V8引擎-Time核心方法之mac篇
- 【转】vc++MCF/C++/C中怎样让应用程序获得或以管理员权限运行 ,ShellExecuteEX编程 --- 获取管理员权限...
- Unity3D资源加密解决方案
- Ubuntu安装Adobe Reader
- KEIL4文件无法正常使用
- Spiral Matrix(Medium)
- 温度计数值转换C语言,f和c温度换算(体温计f怎样转换c)
- 用计算机刻录光盘,刻录光盘,教您如何使用计算机将文件刻录到光盘上.
- 混合个人训练第四十六场(A,B题解) A	数论线代全家桶 (all) B: 看星星 (stars)
- 【读书笔记】《牧羊少年奇幻之旅》
- (环境搭建+复现)74CMS模版注入+文件包含getshell
- webpack中处理css文件
- c#程序员面试题汇总,方便自己记录
- PC_十进制转二进制速算+常用的2进制和10进制数/转换关系
- [SDK]Unity接入Sign in with Apple