.Net Core(二)EFCore
EFCore与之前的EF基本类似,区别在于配置的时候有一些差异;也取消了DB First和Model First,仅保留广泛使用的Code First模式;也不再支持LazyLoad。这里就感受一下其基本使用。
一、EFCore的基本使用
EFCore的Nuget包为Microsoft.EntityFrameworkCore,为了与Linux那边的Mysql连接还需安装provider,这里跟着安装了第三方的Pomelo.EntityFrameworkCore.Mysql。一开始不能用,后来发现两天前Pomelo刚刚发布了针对2.0的正式版,重新安装后就好了。
在mysql添加表,然后配置好DbContext,简易代码为:
public class MyDbContext : DbContext {
public DbSet<Person> Persons { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseMySql("Server=192.168.0.104;database=test1;uid=root;pwd=040207");
}
protected override void OnModelCreating(ModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
var etPerson = modelBuilder.Entity<Person>();
etPerson.ToTable("T_Persons");
}
}
重写了OnConfiguring和OnModelCreating以设置数据库连接和映射表。这里也是和EF区别的地方,后者是在config文件中配置连接字符串的。而且EF是需要手动禁用自动创建表和Migration的,这儿却没有类似的代码,具体后面再学习,Code
First应该有这样的机制。
最后测试添加数据的代码写法与EF完全一致。
这次的C#代码采用了大括号不换行的风格,是因为发现这样的写法相对不占篇幅,而且便于作为文本复制。
二、一对多和多对多
a)一对多
比如一个Author对应多本Book:
//Book实体
public class Book {
public long ID { get; set; }
public string Name { get; set; }
public long AuthorID { get; set; }
//导航属性
public Author Author { get; set; }
}
...
//映射
modelBuilder.Entity<Author>().ToTable("T_Authors");
...
//一对多配置
book.HasOne(a => a.Author).WithMany().HasForeignKey(a => a.AuthorID).IsRequired();
...
//查询
using Microsoft.EntityFrameworkCore;
...
//Include
var books = ctx.Books.Include(a => a.Author).First();
Include放到了Microsoft.EntityFrameworkCore命名空间下。
b)多对多
角色权限是典型的多对多关系,比如User与Role。EFCore目前还不支持先EF那样直接的多对多配置,需要拆分为两个一对多,所以还要设置User与Role的中间表:
public class UserRole {
public long ID { get; set; }
public long UserID { get; set; }
public long RoleID { get; set; }
public User User { get; set; }
public Role Role { get; set; }
}
...
//两个一对多关系
userRole.HasOne(a => a.User).WithMany().HasForeignKey(a => a.UserID).IsRequired();
userRole.HasOne(a => a.Role).WithMany().HasForeignKey(a => a.RoleID).IsRequired();
...
//查询
var rel = ctx.UserRoles.Include(a=>a.Role).Where(r => r.UserID == userID);
学习资料:如鹏网.net提高班http://www.rupeng.com/News/10/4603.shtml
.Net Core(二)EFCore的更多相关文章
- abp(net core)+easyui+efcore仓储系统——解决方案介绍(二)
abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) ABP框架 首先介绍一下abp框架,abp其 ...
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十二)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理二 (二十)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理三 (二十一)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理四 (二十二)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理五 (二十三)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理七(二十五)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理八(二十六)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
随机推荐
- 分布式任务调度系统xxl-job源码探究(二、服务中心)
接下来看下服务端代码 服务端源码 服务端通过管理quartz定时任务组件,分发任务 先从入口看起,由web.xml进入,可以看出,自己编写的代码从applicationcontext-xxl-job- ...
- @RequestParam加不加的区别
感觉@撸码识途 https://www.cnblogs.com/tinyj/p/9786131.html 加上的情况: @RequestMapping("demo") public ...
- ubuntu下TFTP Server 的安装和使用方法
tftp是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP).小型文件传输协议非常简单,通过少量存储器就能轻松实现 ——这在当时是很重要的考虑因素.所以TFTP被用于引导计算机,例如 ...
- 自学vue笔记 (二) : 实例与生命周期
一: 什么是实例 我们说了,Vue 应用都应该从构建一个 Vue 实例开始.它管理着挂载在它身上的所有内容,因此实例是一个根实例, 所有的组件都应该挂载在根实例上面.创建一个 Vue 实例,需要通过 ...
- Maven 如何发布 jar 包到 Nexus 私库
Nexus2可以通过管理界面来上传jar包到私库中,而最新的Nexus3却找不到了上传界面,只能通过以下方式来发布到私库. 发布第三方jar包 这种情况是maven远程仓库没有,本地有的第三方jar包 ...
- Rip配置
Rip配置 首先建立如图拓扑图 分别配置两台电脑的ip地址和子网掩码和网关.如图所示. 在router0上配置两个端口的IP以及子网掩码 在路由器router0上配置rip2协议.里面的no auto ...
- 可能比文档还详细--VueRouter完全指北
可能比文档还详细--VueRouter完全指北 前言 关于标题,应该算不上是标题党,因为内容真的很多很长很全面.主要是在官网的基础上又详细总结,举例了很多东西.确保所有新人都能理解!所以实际上很多东西 ...
- Python多进程库multiprocessing中进程池Pool类的使用
问题起因 最近要将一个文本分割成好几个topic,每个topic设计一个regressor,各regressor是相互独立的,最后汇总所有topic的regressor得到总得预测结果.没错!类似ba ...
- Java并发编程笔记之CyclicBarrier源码分析
JUC 中 回环屏障 CyclicBarrier 的使用与分析,它也可以实现像 CountDownLatch 一样让一组线程全部到达一个状态后再全部同时执行,但是 CyclicBarrier 可以被复 ...
- iOS开发必会的坐标系探究
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由落影发表于云+社区专栏 前言 app在渲染视图时,需要在坐标系中指定绘制区域. 这个概念看似乎简单,事实并非如此. When an a ...