EF Core – Library use EF
前言
写 Library 有时候会用到 database, 会想用 EF 来维护.
比如 Identity, IdentityServer, OpenIddict, 这些 Library 都有使用到 EF.
虽然大家都用 EF, 但它们使用的手法都不太一样哦.
这篇就来研究一下, 写 Library 的时候怎么去使用 EF.
主要参考
相关 Class Library EF Core 的文章
.NET Core — Using Entity Framework Core in a separate Project
Design-time DbContext Creation
A library to run your business logic when using Entity Framework Core
Using EF Core in a Separate Class Library
Using EF Core in a Separate Class Library project
4 种手法
不要问我为什么有这么多 pattern. 我也想知道.
继承方式
Identity 的做法是用继承, ApplicationDbContext 继承 IdentityDbContext
我不太欣赏这种方式 (就不多介绍了). 但是不只 identity 这样用哦, 有些 library 也是用这个方式
多个 DbContext
IdentityServer 用的方式是多个 DbContext, 出来的 Migrations folder 长这样
我觉得这个方案挺不错的, 分得很开.
首先, Library 定义好 LibraryDbContext, Entity 等
然后 Application startup,cs
var assemblyName = typeof(Program).GetTypeInfo().Assembly.GetName().Name;
builder.Services.AddDbContext<LibraryDbContext>(options =>
options.UseSqlServer(connectionString, o => o.MigrationsAssembly(assemblyName))
);
这里只是写个 demo 我就没有封装太美了, 关键就是那个 options.UseSqlServer 要让 Application 负责就可以了.
还有一点就是一定要配上 MigrationsAssembly.
ReplaceService IModelCustomizer
OpenIddict 用的是 ReplaceService
然后
然后
这个方案我也是不太喜欢 (就不多介绍了), 要知道 ReplaceService 只能用一次丫, 你用了其它 Library 也要用就完了.
关于这个方案也可以看这篇 Using Entity Framework Core IModelCustomizer to target multiple data stores
还有它的 limitation
ModelBuilder 扩展
这个是我在 AutoHistory 插件看见的
拦截到了, modelBuilder 就可以用来做 config 了
虽然写不了 DbSet 这种东西, 但是不要紧.
public DbSet<Product> Products => Set<Product>();
调用的时候可以用泛型 Type
我觉得这个方案算是最简单的了.
EF Core – Library use EF的更多相关文章
- EF Core 快速上手——EF Core的三种主要关系类型
系列文章 EF Core 快速上手--EF Core 入门 本节导航 三种数据库关系类型建模 Migration方式创建和习修改数据库 定义和创建应用DbContext 将复杂查询拆分为子查询 本 ...
- EF Core 快速上手——EF Core 入门
EF Core 快速上手--EF Core 介绍 本章导航 从本书你能学到什么 对EF6.x 程序员的一些话 EF Core 概述 1.3.1 ORM框架的缺点 第一个EF Core应用 本文是对 ...
- EF Core 迁移过程遇到EF Core tools version版本不相符的解决方案
如果你使用命令: PM> add-migration Inital 提示如下信息时: The EF Core tools version '2.1.1-rtm-30846' is older t ...
- EF Core 三 、 EF Core CRUD
EF Core CRUD 上篇文章中,我们已经基本入门了EFCore,搭建了一个简单的EFCore项目,本文开始简单使用下EF,做增删改查的相关操作: 一.数据新增操作(C) public stati ...
- IOC+EF+Core项目搭建EF封装(一)
添加应用Microsoft.EntityFrameworkCore:Microsoft.EntityFrameworkCore.Design:Microsoft.EntityFrameworkCore ...
- EF Core中Fluent Api如何删除指定数据表中的行
这两天一直在研究在code first下如何删除数据表中的指定行,于是开始搜狗,后来百度,压根就找不到资料,后来一想可能我的搜索关键字有问题,而且ef core命令与ef的命令差不多,于是从这两个方面 ...
- EF core 性能调优
Entity Framework Core performance tuning – a worked example Last Updated: February 25, 2019 | Create ...
- [翻译 EF Core in Action 1.10] 应该在项目中使用EF Core吗?
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- [翻译 EF Core in Action 1.11] 何时不应该使用EF Core
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- EF Core 快速上手——创建应用的DbContext
系列文章 EF Core 快速上手--EF Core 入门 EF Core 快速上手--EF Core的三种主要关系类型 本节导航 定义应用的DbContext 创建DbContext的一个实例 创建 ...
随机推荐
- oeasy教您玩转vim - 85 - # 全局命令
"h", "b", "f", "d", "e", "a", "c& ...
- 安卓开发 StateListDrawable 应用
基础部份 StateListDrawable 安卓开发中,如果要做一个按扭按下改变背景,或获取焦点改变背景,最简单的方法是利用将背景指向一个资源,然后果在资源中配置事件,总共分为三步, 1) ...
- 【Vue】Re22 Axios
Axios[AJAX I\O System] 创建案例项目并且安装Axios npm install axios --save 接口测试网址: http://httpbin.org/ 案例提供的数据地 ...
- 【ECharts】04 数据交互
ECharts 异步加载数据 ECharts 通常数据设置在 setOption 中,如果我们需要异步加载数据,可以配合 jQuery等工具,在异步获取数据后通过 setOption 填入数据和配置项 ...
- PVE linux_VM 扩容分区
页面 调整磁盘大小 手动分区 fdisk -l fdisk /dev/sda 对该磁盘进行分区, 输入n并回车,n是"new"新建分区 [root@localhost ~]# fd ...
- 【转载】python画带方差的折线图(csdn上最简洁的代码之一附上)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 原文链接:https://blog.csdn.net/a1920993165/article/ ...
- 说说中国高校理工科教育中的基础概念混乱问题——GPU是ASIC吗
在YouTube上看到这样一个视频: https://www.youtube.com/watch?v=7EXDp6c9n-Q&lc=Ugydwl8gppB5FWE8Y5V4AaABAg.9fc ...
- java多线程之-CAS无锁-unsafe理解
1.背景 这一节我们来学习一下unsafe对象 2.案例 1.自定义一个获取unsafe对象的类 package com.ldp.demo07Unfase; import sun.misc.Unsaf ...
- 祝贺小鹏汽车Gallardot同学成为Apache DolphinScheduler Committer!
社区迎来新committer!这次是来自小鹏汽车的Gallardot,看看他与Apache DolphinScheduler社区的故事吧. 对话社区 Q1:您为Apache DolphinSchedu ...
- 9组-Beta冲刺-5/5
一.基本情况(15分) 队名:不行就摆了吧 组长博客:9组-Beta冲刺-5/5 GitHub链接:https://github.com/miaohengming/studynote/tree/mai ...