Web Analytics
yangyang

码农兼一个普普通通小青年

All Posts


使用EntityFrameworkCore对包含DbContext的类库生成迁移脚本

最近在学习EntityFramework Core的相关东西,其实数据库访问的方式有很多种比如有上古神器ADO.NET ,还有从java泊来的NHibernate等,当然还包括之前的Entity Framework,还有比较轻量级的Dapper等。关于数据访问,当然可以用手写SQL,然后用ADO.NET那一套来处理,但是都2020年了,这么搞显然不够高级,而且不够效率,最重要的是容易996。但是据我所知,并不是所有的公司都会去用ORM,就拿我曾经待过的还算比较大的一家公司来说,一般开发人员是接触不到DB的,对数据库的一些操作操作,有专门的DBA来管理,比如DBA会对某张表默认生成CRUD的存储过程,去调用就可以了,对于查询,一般的也是开发人员用ADO.NET 自己写SQL语句,最多就是把ADO.NET封装一下,提供给一般的开发人员使用。甚至一般的LINQ在有些公司都是禁止使用的 …

Entity Framework Core Migrations

SQLite入门及优化

SQLite是一个小型的关系型数据库系统,应用非常广泛,通常可以作为本地数据的临时存储,比如一些移动App使用SQLite作为本地存储,下面简单介绍一下SQLite的使用,以及注意事项。 在C#中使用SQLite比较简单。首先要去官网下载System.Data.SQLite 文件,这个是对SQLite3的C语言dll的.NET包装,根据当前的.NET版本以及操作系统是32位,还是64位,下载不同的程序集。当然,还可以在Visual Studio中,通过NuGet packages添加。 下载完成之后,在项目中引用System.Data.SQLite.dll就可以使用ADO.NET以类似访问SQL Server的方式访问SQLite了,当然,上面下载的安装包中,还包括System.Data.SQLite.EF6.dll,System.Data.SQLite. …

SQLite

关于新的个人博客

大概2011年的时候我在博客园上开通了一个主页,那个时候刚毕业,晚上下班回家无所事事,又不喜欢打游戏,就开始研究一些技术方面的东西,然后开始在上面写文章,之所以想着写文章,原来只是记录一下个人的一些经验或者遇到的问题的解决方法,方便以后自己查看,正所谓“好记性不如烂笔头”,很多东西如果不及时记录下来,时间长了也就会忘记。还有一部分文章是个人的一些读书笔记,比如看完之后,想着看能不能自己复述出来,这样也能检验自己是否真正的理解,我觉得书写对锻炼自己的表达能力和文字功底,是有一些帮助的。 从2011年到2016年期间,断断续续的写了大概100多篇,有一些是个人工作中遇到问题的总结,比如Excel插件开发系列,有一些是工作之余的一些爱好,比如Kinect开发,还有一些是读书笔记,比如算法和数据结构那些文章。当然,这些都是在工作不需要经常加班的条件下, …

.NET

通过资源监视器排查网络高占用异常

最近公司某台服务器的网络占用经常达到99%,好像最高就是这么多。使得很多服务受到影响,下面就分享一下如何通过windows自带的一些工具排查网络高占用异常。   首先最简单的是资源管理器,这个通过工具栏右键资源管理器,或者Ctrl+Alt+Del就可以调出来,然后点到联网这一个标签页。在最下面列出了机器的所有网卡,包括虚拟网卡,的线路速度和网络使用率。如下图,可以看到,这台服务器上有3个网络适配器,实际上这台服务器上插了两个网卡。     可以看到“本地连接”和“本地连接2”都有流量占用,这里比较关心的是“本地连接”这个网卡上的应用占用流量情况。于是需要找出这两张网卡对应的本地IP地址。     打开命令行控制台,输入IPConfig即可列出本机所有网卡及IP地址信息,如下:     可以看到,“本地连接”这个网卡对应的IP地址是“192.168.1.8”这个地址。     接下来,我 …

网络监控 资源监视器

Entity Framework的启动速度优化

最近开发的服务放到IIS上寄宿之后,遇到一些现象,比如刚部署之后,第一次启动很慢;程序放置一会儿,再次请求也会比较慢。比如第一个问题,可以解释为初次请求某一个服务的时候,需要把程序集加载到内存中可能比较慢,第二个问题有可能是IIS的线程回收机制导致放置若干长时间,空闲的进程被回收了,再次请求的话可能比较慢。 刚开始的时候没有太在意,但是随着系统的发布,这种初次请求,或者闲置若干时间后第一次请求的漫长等待使得App的体验很差,很多时候App加载好半天数据都没过来。如果前端没处理好,还会导致App的假死。所以就花了点功夫研究下什么原因导致。 刚开始的时候,还以为是WebService的框架出了问题。后面使用App,通过Fiddler看到了,某次请求db.竟然长达6s中,并且每次导致请求超时都出现在db.访问这一块,这显然不正常。早期,我们访问数据库使用的是原始的ADO.NET …

EntityFramework Speed Frist Startup

一点读书笔记之一

去年年底的时候买了一只Kindle Paperwhite,因为尺寸较小,方便携带,所以也比较适合看一些非技术类的图书。加上每天上下班路上的2个小时,等电梯时间,以及吃饭等座的一些闲暇时间,看了一些书,有时候突然觉得,只有这些小的碎时间才是最自由的,平常上班时间为了生活,晚上回来要休息积蓄能量。几个月下来也零零散散的看了一些书,有时候看着看着很想写点东西,就在手机上用OneNote记了作为读书笔记,本来想在朋友圈分享的,由于字数限制就写了这篇水文,下面就按照觉得有意思的顺序来逐个些吧,共九本书,后面再凑够9本再写一篇,哈哈。 1:《红楼梦》,我第一次读完了,前八十回写的非常精彩,节奏舒缓,故事的组织和穿插真是行云流水,写的云淡风轻,看完之后还能回味。后四十回明显感觉到人设都不一样了,尤其是林妹妹都吃起了五香大头菜,大观园的生活水平下降的有点快。后面的章节更惨,一节死十几个人,结尾也比较仓促 …

Literature

记一次Redis被攻击的事件

最近几个月非常忙,所以很少有时间写博客,这几天终于闲了一些,于是就在整理平时的一些笔记。恰好这几天Redis服务器发生了问题,就记录一下。 我司有两款分别是2B和2C的App,类似于阿里旺旺的卖家版和买家版,里面有一个聊天的功能模块。双方可以通过这个功能聊天。内部通讯使用了环信,只是将本地账号和环信账号进行了关联。其他的信息,比如用户基本信息,好友关系,群组关系等存在Redis中,为防止Redis出现问题导致数据丢失(尽管配置了持久化),同时使用消息队列将数据写入SQLServer中进行了冗余。这是一种Redis的典型使用场景,从速度和效率上满足要求。 线上环境一直运行正常,但是在上周日(一个本该休息的日子),领导打电话过来说线上环境的用户登录不了,无法聊天,没有群相关信息。我想估计是Redis出现了问题,让领导不要着急,先让运维看看服务是否还在运行,不行的话,把Redis重启一下,因 …

Redis NoSQL StackExchange.Redis

浅谈委托和事件(一)

关于委托和事件,可能是.NET或者说是面向对象编程语言中的一个比较重要又比较难以理解的概念。关于这一话题,园子里的人也写了很多文章,最经典的可能就是张子阳的C#中的委托和事件这两篇文章了,之前也看过MSDN 上的WebCast深入 "委托和事件"。可能和很多人一样,刚开始读的时候,觉得很清楚,但是过了一段时间好像又忘记了委托和事件的区别,知道很久以前,在一次面试中我被问到委托和事件有什么区别,一下子就说不清了。 所以这里稍微理一下,也算是自己的一个总结。当然,还是推荐大家先读前面推荐的两篇文章。 .NET中的事件模型是建立在委托(delegate)这一机制上的,所以首先来看看什么是委托。 委托 委托是一种类型安全的调用回调方法,类似于C中的函数指针。委托(Delegate)是一个类,当创建实例时,需要传入方法名称,每一个委托都有一个签名,比如: delegate int …

.NET Delegate

使用Metrics监控应用程序的性能

在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析。在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如当前系统中对外提供了多少次服务,这些服务的响应时间是多少,随时间变化的情况是什么样的,系统出错的频率是多少。这些动态的准实时信息对于监控整个系统的运行健康状况来说很重要。 一些应用程序,比如对外提供接口或者服务的WebService,对整个系统的实时运行情况进行监控显得尤为重要,着就像我们操作系统里面的资源管理器一样,如果能够实时或者准实时的看到整个系统耗费的CPU,内存等资源,对我们快速对系统做出响应,以及优化很重要。并且,这些实时的性能参数信息,对于一些高级应用场景,比如服务的熔断机制(需要实时统计系统出错比例和响应时间),只有做到了实时监控才能提供这些数据,才能实现这种提高系统稳健性的功能。 前 …

Metrics

浅谈跨域以及WebService对跨域的支持

跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。 在以前,前端和后端混杂在一起, 比如JavaScript直接调用同系统里面的一个Httphandler,就不存在跨域的问题,但是随着现代的这种多种客户端的流行,比如一个应用通常会有Web端,App端,以及WebApp端,各种客户端通常会使用同一套的后台处理逻辑,即API, 前后端分离的开发策略流行起来,前端只关注展现,通常使用JavaScript,后端处理逻辑和数据通常使用WebService来提供json数据。一般的前端页面和后端的WebService API通常部署在不同的服务器或者域名上。这样,通过ajax请求WebService的时候,就会出现同源策略的问题。 …

Cross Domain CORS JSONP .NET