WebApi EF Core 2.1 Code First 设置导航属性,外键
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 设置导航属性,外键的更多相关文章
- .net core webapi+EF Core
.net core webapi+EF Core 一.描述: EF Core必须下载.net core2.0版本 Micorsoft.EntityFrameworkCore:EF框架的核心包Micor ...
- EF Core中如何正确地设置两张表之间的关联关系
数据库 假设现在我们在SQL Server数据库中有下面两张表: Person表,代表的是一个人: CREATE TABLE [dbo].[Person]( ,) NOT NULL, ) NULL, ...
- EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载
EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...
- [翻译 EF Core in Action 2.1] 设置一个图书销售网站的场景
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- 【.Net Core 学习系列】-- EF Core 实践(Code First)
一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二解决方案: 新建项目: File --> New --> Project --> ...
- EF Code First中的主外键约定和一对一、一对多关系的实现
对于主外键约定的理解,其实是学习实体间一对一和一对多关系的基础. 1.1 主键(Key)约定 主键的默认约定是:只要字段名为--实体名(类名)+"id"(不区分大小写),这就算是默 ...
- ef core中使用code first
这个配置还是挺坑,照这个一步步做倒是可以 https://www.cnblogs.com/chenzhaoyu/p/7831980.html
- 【.Net 学习系列】-- EF Core实践(Code First)
一.开发环境: vs2015, .Net Framework 4.6.1 二.解决方案: 新建一个控制台应用程序 添加引用:Microsoft.EntityFrameworkCore.SqlServe ...
- ef core 数据类型 && 表字段名设置
HasColumnType HasColumnType是指定字段类型 [Column(TypeName = "decimal(18, 2)")] public decimal Mo ...
- C# 数据操作系列 - 8. EF Core的增删改查
0.前言 到目前为止,我们看了一下如何声明EF Core的初步使用,也整体的看了下EF Core的映射关系配置以及导航属性的配置. 这一篇,我带大家分享一下,我在工作中需要的EF Core的用法. 1 ...
随机推荐
- .NET 中创建录音机和播放器应用
前言 在本博客中,你将了解如何在 .NET MAUI 中开发录音机和播放器.音频播放器将录制和播放音频文件.此应用程序可以在Android和iOS上部署和使用. 预览 以下是该录音机和播放录音的应用程 ...
- 7. Light (对象)
Light Mode:模式 Realtime: 实时的.就是当前光照效果是实时的,不包含烘焙效果(即使场景曾经烘焙过) Mixed: 混合的.就是既使用烘焙数据对静态对象(Lightmap stati ...
- 1487. 保证文件名唯一 (Medium)
问题描述 1487. 保证文件名唯一 (Medium) 给你一个长度为 n 的字符串数组 names .你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹. 由 ...
- 数据库原理-SQL查询语句
参考书籍<Oracle 数据库开发与应用> SQL查询语句,针对数据库中的表提供了各种查询功能.这里分为五个部分,说明在SQL中如何对数据进行查询. 简单查询 SELCET语句是最简单的S ...
- 启动项目报错org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character ‘@‘
报错信息:org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character ...
- UE打LOG整理
Kismet库 蓝图方法cpp使用 例:打LOG:Print String 蓝图节点的鼠标tips:Target is Kismet System Library #include "Run ...
- vue3新特性的使用
1.Suspense组件:等待异步组件时渲染一些额外内容,让应用有更好的用户体验 例: <template> <div class="app"> <h ...
- git常规操作
git拉代码 使用git clone命令从仓库下载代码,代码下载到了本地:git clone 链接 如果仓库代码又了更新,这时可以使用git pull命令将更新下载到本地 在对本地代码就行修改后,可以 ...
- 2022-04-26内部群每日三题-清辉PMP
1.一家组织的经验教训数据库表明过去的重大项目问题是质量失败.项目经理在制定质量管理过程时决定做得更彻底.为确保质量,项目经理应该怎么做? A.根据项目的范围和需求制定质量管理计划. B.将所有质量控 ...
- 粉色的猫MISC(bugku)
一 题目描述 ps:本题特别感谢树叶大佬给的一些提示以及WP!欢迎大家关注树木有点绿~~ 二 解题过程 下载附件得到zip压缩包 根据作者提示,压缩包注释应该为压缩包密码. 1.压缩包密码 一开始看 ...