ef core mysql 字符集,EF Core 基础知识
数据库连接字符串
在 ASP.NET Core 添加配置片段:
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
}
}
然后,配置对应的DbContext:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
}
日志记录
EF Core 默认会与 ASP.NET Core的日志提供程序一起工作,只需要使用AddDbContext或AddDbContextPool添加服务即可。
除此之外,还可以手工添加日志记录。
首先,创建LoggerFactory的单例:
public static readonly LoggerFactory MyLoggerFactory
= new LoggerFactory(new[] {new ConsoleLoggerProvider((_, __) => true, true)});
然后,通过DbContextOptionsBuilder注册此单例:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");
如果你只想记录想要的日志,例如数据操作语句,可以在ILoggerProvider中进行配置:
public static readonly LoggerFactory MyLoggerFactory
= new LoggerFactory(new[]
{
new ConsoleLoggerProvider((category, level)
=> category == DbLoggerCategory.Database.Command.Name
&& level == LogLevel.Information, true)
});
配置弹性连接
EF Core 可以根据不同的数据库失败,制定不同的执行策略,例如故障自动重试等。
针对SQL Server,它知道可以重试的异常类型,并且具有合理的默认值的最大重试,重试次数等之间的延迟。
配置如下:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=EFMiscellanous.ConnectionResiliency;Trusted_Connection=True;ConnectRetryCount=0",
options => options.EnableRetryOnFailure());
}
也可在Startup中配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(
options => options.UseSqlServer(
"",
providerOptions => providerOptions.EnableRetryOnFailure()));
}
你也可以自定义执行策略:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseMyProvider(
"",
options => options.ExecutionStrategy(...));
}
自动重试与事物
对于执行自动重试策略来说,每一次调用context.SaveChanges()方法将会当做一个重试单元。如果你的事物中有多个SaveChanges操作,配置的自动重试策略将会抛出异常,解决方法是使用委托来手动调用执行策略。代码如下:
using (var db = new BloggingContext())
{
var strategy = db.Database.CreateExecutionStrategy();
strategy.Execute(() =>
{
using (var context = new BloggingContext())
{
using (var transaction = context.Database.BeginTransaction())
{
context.Blogs.Add(new Blog {Url = "http://blogs.msdn.com/dotnet"});
context.SaveChanges();
context.Blogs.Add(new Blog {Url = "http://blogs.msdn.com/visualstudio"});
context.SaveChanges();
transaction.Commit();
}
}
});
}
此方法同样适用于环境事物:
using (var context1 = new BloggingContext())
{
context1.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" });
var strategy = context1.Database.CreateExecutionStrategy();
strategy.Execute(() =>
{
using (var context2 = new BloggingContext())
{
using (var transaction = new TransactionScope())
{
context2.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });
context2.SaveChanges();
context1.SaveChanges();
transaction.Complete();
}
}
});
}
自动重试策略需要考虑幂等性问题,防止数据添加重复等误操作。EF Core 引入了一种状态检查机制,可以帮助我们实现是否执行成功的检测:
using (var db = new BloggingContext())
{
var strategy = db.Database.CreateExecutionStrategy();
var blogToAdd = new Blog {Url = "http://blogs.msdn.com/dotnet"};
db.Blogs.Add(blogToAdd);
strategy.ExecuteInTransaction(db,
operation: context =>
{
context.SaveChanges(acceptAllChangesOnSuccess: false);
},
verifySucceeded: context => context.Blogs.AsNoTracking().Any(b => b.BlogId == blogToAdd.BlogId));
db.ChangeTracker.AcceptAllChanges();
}
DbContext配置项
DbContext必须有DbContextOptions实例能,Options的作用如下:
配置数据库提供程序
连接字符串
数据库提供程序级别的可选项
EF Core级别的可选项
可以通过构造函数添加Options:
public class BloggingContext : DbContext
{
public BloggingContext(DbContextOptions options)
: base(options)
{ }
public DbSet Blogs { get; set; }
}
也可以通过OnConfiguring方法进行配置:
public class BloggingContext : DbContext
{
public DbSet Blogs { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=blog.db");
}
}
使用依赖注入DbContext时,需要构造函数的方式进行配置,并在Startup中配置DbContext:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options => options.UseSqlite("Data Source=blog.db"));
}
避免多线程操作
EF Core 提供了async/await操作,但是这是一个语法糖,它并不支持并行操作,这是由于数据库连接的特性限制的,因此我们应避免针对同一个Context执行任何并行操作。
参考文档
参考微软 EF Core 使用文档,详情:
相关文章:

模板特化,全特化,偏特化,全部特化,部分特化的含义
模板特化,任何针对模板参数进一步进行条件限制设计的特化版本。《泛型思维》 全特化就是全部特化,即针对所有的模板参数进行特化。《c primer》偏特化就是部分特化,即针对部分模板参数进行特化。《c primer》全特化和偏特化的定义不是很严格&…

PHP中单例模式:三私一公是什么?
PHP中单例模式:三私一公是什么? 三私一公 私有化静态属性 私有化构造方法 私有化克隆方法 公有化静态方法 转载于:https://www.cnblogs.com/phpisfirst/p/9792545.html

php 缓存模块,PHP缓存之模块缓存(APC)_PHP教程
PHP缓存之模块缓存(APC)APC是Alternative PHP Cache的简称,是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。1、PHP配置APC开启APC模块,需要将 extensionphp_apc.dll 前面的注释去掉即…

pta 考试座位
L1-005 考试座位号 (15 分) 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码&#…

JSDoc那些事
几天工作上需要文档化一些Javascript东西,所以在找一些JS文档化工具,以下分析几种工具。 1.JSDoc-toolkit 一开始还想用这个工具,但后来在解析生成文档时候,出现了很严重的错误,还存在其他问题。 问题1:闭包…

WindowType 属性
WindowType 属性 指定一个表单集或表单在显示或用DO FORM来运行时的行为.在设计和运行时可供使用. Object.WindowType[ nType] 返回值 nType对于表单集,WindowType 属性的设置如下: 设置说明 0 无模式。 1 模式。其它表单(非该表单集中的)不能变为活动…

Excel VBA附合导线平差自动计算表
这是6,7年前做的一个excel vba自动计算附合导线平差的表格。 对于做测绘的朋友来说,附合导线平差是最基础的技能,目前来说,能平差的软件和工具也很多,像南方的平差易,科傻平差、清华三维平差等,但这些软件操…

结构体解决念数字问题
L1-007 念数字 (10 分) 输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下: 0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu输入格式: 输入在一行中给出一个整数&…

Eclipse NDK 配置,无需安装Cygwin
Eclipse NDK 配置,无需安装Cygwin Eclipse NDK 配置,不用安装Cygwin 文章转自http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.html一、关于NDK: NDK全称:Native Development Kit。 1、NDK是一系列工具的集合。 NDK提供了一系…

php裁剪图片白边,php生成缩略图填充白边(等比缩略图方案)
网站上传图片后生成缩略图应该是非常常用的功能了,通常来讲为了网站显示美观,缩略图会是同样尺寸,比如最近笔者做的一个站点,缩略图规格要求都是160120。但是如果上传的图片比例和缩略图不一致,直接缩放的话就会导致图…

PHP 平分数组
1 <?php2 /**3 *一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值4 *比如{3,2,4,3,6} 可以分成{3,2,4,3…

Shoot the Bullet(ZOJ3229)(有源汇上下界最大流)
描述 ensokyo is a world which exists quietly beside ours, separated by a mystical border. It is a utopia where humans and other beings such as fairies, youkai(phantoms), and gods live peacefully together. Shameimaru Aya is a crow tengu with the ability to …

深入理解jQuery插件开发【转】
如果你看到这篇文章,我确信你毫无疑问会认为jQuery是一个使用简便的库。jQuery可能使用起来很简单,但是它仍然有一些奇怪的地方,对它基本功能和概念不熟悉的人可能会难以掌握。但是不用担心,我下面已经把代码划分成小部分…

L1-008 求整数段和 (C++)
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。 输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。 输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行&a…

matlab 迭代 混沌与分形实验报告,实验四 函数的迭代混沌与分形.doc
实验四 函数的迭代混沌与分形.doc 实验四函数的迭代、混沌与分形实验目的1认识函数的迭代;2了解混沌和分形迭代在数值计算中占有很重要的地位,了解和掌握它是很有必要的本实验将讨论用NEWTON迭代求方程根的问题,以及迭代本身一些有趣的现象1基本理论11迭代的概念给定…

小霸王双核/四核手机最新参数曝光
2019独角兽企业重金招聘Python工程师标准>>> 此前爆料出小霸王出手机,今天又有新消息啦。 现在又有消息人士给出了小霸王手机最新的参数情况,其厚度为9.8mm,配备的是4.5寸夏普IPS材质触摸屏,分辨率为960x540像素&#…

聊一聊跨域,Vue向Django请求数据的一些问题
1.做前后端分离 前端使用Vue程序,后端使用Django配合rest-framework。 那么前端Vue通过API接口拿到数据会出现跨域的问题,JSONP只是在get中会用到的,所以这里使用cors来解决一下。 一个Vue程序通过ajax或者axios发送一个请求过来,…

php配置控制器和视图位置,视图控制器
视图控制器视图控制器是连接控制器和模板的桥梁, 更是对模板的强大扩展基本用法视图控制器文件夹位于 app\web\views 目录下, 视图控制器的名称是和控制器的名称相对应的, 并在结尾加上View, Main控制器的默认的视图控制器类名为MainView,内容如下:names…

L1-016 查验身份证 (15 分)
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1&am…

中国互联网的十一种盈利模式
盈利模式一:在线广告 最主要最常见的网络在线盈利模式,国内比较好的是各大门户网站(新浪,搜狐等),也包括行业门户,而且大多数个人网站的盈利模式也是这样,靠挂别人的广告生存。 新新兴的在线短视频网站…

grid布局初试
/*这是HTML*/<!DOCTYPE html> <html><head><meta charset"utf-8" /><title>main</title><link rel"stylesheet" href"css/header.css" /><link rel"stylesheet" href"css/aside.cs…

matlab文件启动位置,matlab中uigetfile()设置默认路径
每次使用uigetfile()函数选择文件路径,默认都是从current folder中选择数据文件,而current folder路径又不是数据文件,那么每次都需要选择径路好几步,繁琐的很。想通过设置current folder路径,使每次运行时uigetfile直…

thinkphp5框架一小时搭建一个php后端(1)
开发环境使用phpstudy 编辑器用sublime 数据库navicat 需要下载composer 先配置好本地域名,然后需要我们将资源引入到项目里面 下载地址www.layui.com. layui框架有很多我们后台开发需要的控件,帮助我们高效完成后台搭建。 先创建我们的入口文件ad…
usb调试模式已打开,adb devices显示List of devices attached 解决办法!纽维K333一键ROOT,获取ROOT权限!...
usb调试模式已打开,adb devices显示老显示List of devices attached 。刚开始以为USB线问题,跟朋友借了一根,未果。 更换其他的机子测试就可以显示设备,但是这部纽维K333 (国产机/android 4.1.1)却显示不出…

记录每个登陆用户的操作记录
在linux系统的环境下,不管是root用户还是其它的用户只有登陆系统后用进入操作我们都可以通过命令history来查看历史记录,可是假如一台服务器多人登陆,一天因为某人误操作了删除了重要的数据。这时候通过查看历史记录(命令…

SRM 563 Div1 500 SpellCards
Description 有n张符卡排成一个队列,每张符卡有两个属性,等级lili和伤害didi。 你可以做任意次操作,每次操作为以下二者之一: 把队首的符卡移动到队尾。使用队首的符卡,对敌人造成di点伤害,并丢弃队首的li张…

一小时Thinkphp后台(2)
之前我们已经写好管理员页面,现在对功能继续实现 基础功能1:对管理进行增删改查 增加 需要在view中新建一个add.html add.html <!DOCTYPE html> <html> <head><title></title><link rel"stylesheet" type…

php的延迟绑定,PHP延迟静态绑定使用方法实例解析
这篇文章主要介绍了PHP延迟静态绑定使用方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下PHP的继承模型中有一个存在已久的问题,那就是在父类中引用扩展类的最终状态比较困难。我们来看一…

java中名词概念的理解
方法的重载:方法名称相同,但参数的类型和个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用。 例如:System.out.println();属于方法的重载。 方法的重载一定是根据参数类型和个数来判断的。 构造函数:构…

Jquery_评分
Description:星星评分--鼠标移动高亮星星来评分,文字描述也对应改变。 KeyTech:无,熟悉Jquery 主要代码: var oContent ["极差", "很差", "一般" , "推荐" , "力荐"];/*定义评价数组*/ var oDiv …