Nuget:

Microsoft.AspNetCore.All

Microsoft.EntityFrameworkCore//Include 导航属性在此空间

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

微软懒加载文档:

https://docs.microsoft.com/en-us/ef/core/querying/related-data

注入EF:

        public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<AppDbContext>(options =>
{
//options.UseSqlServer(Configuration.GetConnectionString("SqlConnection"));
options.UseSqlServer(Configuration["ConnectionStrings:SqlConnection"]);
});
services.AddMvc()
.AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);//设置禁止循环引用
var serviceProvider = services.BuildServiceProvider(); using (var context = serviceProvider.GetService<AppDbContext>())
{
context.Database.Migrate();
}
}

种子数据:

  protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Teacher>().HasMany(x=>x.Students);//设置关系
modelBuilder.Entity<Teacher>().HasData(new List<Teacher>() {
new Teacher() { age=3, id=1, name="T1"}
,new Teacher() { age=3, id=2, name="S2"}
, new Teacher() { age=3, id=3, name="F3"}
, new Teacher() { age=3, id=4, name="D4"}
});
modelBuilder.Entity<Student>().HasOne(c=>c.Teacher);//设置关系
modelBuilder.Entity<Student>().HasData(new List<Student>() {
new Student() { age=3, id=1, name="T" ,TeacherId=2}
,new Student() { age=3, id=2, name="S" ,TeacherId=2}
, new Student() { age=3, id=3, name="F" ,TeacherId=1}
, new Student() { age=3, id=4, name="D" ,TeacherId=3}
});
base.OnModelCreating(modelBuilder);
}

查询:

[HttpGet]
public IEnumerable<object> Get()
{
AppDbContext db = new AppDbContext();
var student = db.Students.Include(x=>x.Teacher).Where(x=>x.id==1).ToList();
var t = db.Teachers.Include(x => x.Students).Where(x=>x.id==2);
return t.ToList();
}

实体:

 public class Student
{
public int id { get; set; }
public int age { get; set; }
public string name { get; set; }
[ForeignKey("Teacher.Id")]//设置外键,表.主键
public int TeacherId { get; set; }
//[JsonIgnore] 禁止序列化JSON
public virtual Teacher Teacher { get; set; } //= new Teacher();
}
public class Teacher
{
public int id { get; set; }
public int age { get; set; }
public string name { get; set; }
//[JsonIgnore] 禁止序列化JSON
public virtual ICollection<Student> Students { get; set; }// = new List<Student>();
}

WebApi EF Core 2.1 Code First 设置导航属性,外键的更多相关文章

  1. .net core webapi+EF Core

    .net core webapi+EF Core 一.描述: EF Core必须下载.net core2.0版本 Micorsoft.EntityFrameworkCore:EF框架的核心包Micor ...

  2. EF Core中如何正确地设置两张表之间的关联关系

    数据库 假设现在我们在SQL Server数据库中有下面两张表: Person表,代表的是一个人: CREATE TABLE [dbo].[Person]( ,) NOT NULL, ) NULL, ...

  3. EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载

    EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...

  4. [翻译 EF Core in Action 2.1] 设置一个图书销售网站的场景

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  5. 【.Net Core 学习系列】-- EF Core 实践(Code First)

    一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二解决方案: 新建项目: File --> New --> Project -->   ...

  6. EF Code First中的主外键约定和一对一、一对多关系的实现

    对于主外键约定的理解,其实是学习实体间一对一和一对多关系的基础. 1.1 主键(Key)约定 主键的默认约定是:只要字段名为--实体名(类名)+"id"(不区分大小写),这就算是默 ...

  7. ef core中使用code first

    这个配置还是挺坑,照这个一步步做倒是可以 https://www.cnblogs.com/chenzhaoyu/p/7831980.html

  8. 【.Net 学习系列】-- EF Core实践(Code First)

    一.开发环境: vs2015, .Net Framework 4.6.1 二.解决方案: 新建一个控制台应用程序 添加引用:Microsoft.EntityFrameworkCore.SqlServe ...

  9. ef core 数据类型 && 表字段名设置

    HasColumnType HasColumnType是指定字段类型 [Column(TypeName = "decimal(18, 2)")] public decimal Mo ...

  10. C# 数据操作系列 - 8. EF Core的增删改查

    0.前言 到目前为止,我们看了一下如何声明EF Core的初步使用,也整体的看了下EF Core的映射关系配置以及导航属性的配置. 这一篇,我带大家分享一下,我在工作中需要的EF Core的用法. 1 ...

随机推荐

  1. PULPINO仿真建立

    PULPINO仿真建立 PULPINO主要特点: systemverilog实现 有常规外设,GPIO.SPI.I2C.UART等 有调试接口 总线有AXI,外设总线为APB,扩展性好 脚本为cmak ...

  2. 下拉刷新,上拉触底(.js里自带)

    <view>content值是{{cont}}</view> <button bindtap="add">+1</button>   ...

  3. hdu-2544 最短路(SPFA)

    SPFA整体过程 1.用一个队列queue支撑. 2.dis[i]表示目前x到i的距离. 3.b[i]表示i是否在q中. 4.清空队列while(q.size()) q.pop();. 5.初始化(把 ...

  4. redis 5.0.5集群部署与服务器宕机故障模拟

    背景 业务稳定性要求需要一套redis集群来保障 因此采用 redis cluster 集群 环境 名称 ip地址 cpu 内存 master端口 slave端口 redis-651 10.65.6. ...

  5. vscode开发vue3+ts环境搭建

    一.开发环境准备 1.nvm 2.vscode 3.node 4.chome 5.git 6.npm install -g yarn tyarn 7.tyarn global add commitiz ...

  6. webpack5的基本用法

    webpack的基本使用 webpack 本身功能有限: 开发模式: 仅能编译JS中的ES Module 语法 生产模式: 能编译ES Module 语法, 还能压缩JS代码 添加实例文件 npm i ...

  7. 10. watch的实现原理

    watch的实现原理 watch和computed一样, 也是基于 Watcher 的 组件内部使用的watch 和 外部使用的 vm.$watch()都是调用的Vue.prototype.$watc ...

  8. 【windows】bat脚本、批处理文件

    ::当前盘符 @echo current pan : %~d0 ::当前路径 @echo current path : %cd%\ ::当前bat文件路径 @echo the bat's path : ...

  9. rabbitMq客户端连接超时

    rabbitMq客户端连接超时 rabbitmq有两个端口号:15672,用户web页面的http连接:5672用户客户端的tcp长连接. 用腾讯云搭建时:需要在防火墙策略处将两个端口都打开.

  10. C#连Mysql数据库报错 SSL Connection error

    MySql.Data.MySqlClient.MySqlException (0x80004005): SSL Connection error. ---> System.AggregateEx ...