【转】让Entity Framework不再私闯sys.databases
这里的“私闯sys.databases”是指Entity Framework默认发起的查询:SELECT Count(*) FROM sys.databases WHERE [name]=N'数据库名'
注:本文针对的是Entity Framework Code First场景,Entity Framework的版本是4.1与4.2。
3月份的时候在揭开Entity Framework LINQ查询的一点面纱一文中发现了Entity Framework的两个幕后交易。
第一个交易(私闯sys.databases):
第二个交易(私自打探数据库的信息):
[Extent1].[Id] AS [Id],
[Extent1].[ModelHash] AS [ModelHash]
FROM [dbo].[EdmMetadata] AS [Extent1]
ORDER BY [Extent1].[Id] DESC
当时通过modelBuilder.Conventions.Remove<IncludeMetadataConvention>();阻止了第二个交易,但未能找到方法阻止第一个交易。
记得当时用的是Entity Framework 4.0,后来微软发布了EF4.1和EF4.2。那我们来看看Entity Framework有没有改邪归正。
结果发现,只改了一半,第二个交易“浪子回头”,而第一个交易“贼心不改”。
代码世界是完美世界,决不允许这样的行为,一定要将之绳之以法。
经过今天下午的努力,终于找到了这根“绳子”:
Database.SetInitializer<DbContextTypeName>(null);
示例代码如下:

public class EfUnitOfWork : DbContext, IUnitOfWork
{
public EfUnitOfWork()
{
Database.SetInitializer<EfUnitOfWork>(null);
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}

可以看出,Entity Framework“私闯sys.databases”的目的是为了在根据实体生成数据库时,检查是否存在同名的数据库。
而我们的应用场景根本不需要Entity Framework生成数据库,所以将之绳之以法是“名正言顺”。
【转】让Entity Framework不再私闯sys.databases的更多相关文章
- 让Entity Framework不再私闯sys.databases
这里的“私闯sys.databases”是指Entity Framework默认发起的查询:SELECT Count(*) FROM sys.databases WHERE [name]=N'数据库名 ...
- [转]Porting to Oracle with Entity Framework NLog
本文转自:http://izzydev.net/.net/oracle/entityframework/2017/02/01/Porting-to-Oracle-with-Entity-Framewo ...
- 让Entity Framework启动不再效验__MigrationHistory表
Entity Framework中DbContext首次加载OnModelCreating会检查__MigrationHistory表,作为使用Code Frist编程模式,而实际先有数据库时,这种检 ...
- Entity Framework 与 面向对象
说要分享,我了个*,写了一半放草稿箱了两个星期都快发霉了,趁着周末写完发出来吧. 文章分为五部分: 基础.类讲述的是用到的一些EF与面向对象的基础: 业务是讲怎么划分设计业务: 设计模式和工作模式讲述 ...
- Entity Framework 5.0系列之Code First数据库迁移
我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- Entity Framework教程(第二版)
源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点
在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...
- 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新
为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...
随机推荐
- Newtonsoft.Json Deserialize Type 或者 同类型 变量 反序列化
Newtonsoft.Json 经常再用 这样的需求 还是很少用 场景 方法一:根据 Type 反序列化 ; string jsongString = JsonConvert.SerializeObj ...
- 赛肯德 | 2017NEERC某题
我们枚举每一条边的流量x,将它作为底流(也就是比它大的的流量变成差值,比它小的流量为0),然后我们设x就是路径上第K大的那个边的流量.然后跑最短路,加上dis[n]就是当前的答案.然后取min即可. ...
- 和我一起学python
近来python越来越火,很多人都出了教程,我也来出一个凑凑热闹吧. pycharm激活 http://idea.lanyus.com/ https://blog.csdn.net/u01404481 ...
- 激活IDEA,pycharm方法
1.修改hosts文件将0.0.0.0 account.jetbrains.com添加到hosts文件最后,注意hosts文件无后缀,如果遇到无法修改或权限问题,可以采用覆盖的方法去替换hosts文件 ...
- java学习笔记—Tomcat(9)
1 目录结构 bin 二进制目录,主要存储的是一些启动和停止服务器的命令startup.bat conf 配置目录,server.xml web.xml lib 服务器软件使用的第三方的j ...
- 【OCP-12c】CUUG 071题库考试原题及答案解析(18)
18.(8-7) choose twoWhich two statements are true regarding views? (Choose two.) A) A simple view in ...
- centos7安装nginx(自定义安装文件夹)
一.安装所需要的依赖软件 1.gcc:nginx编译依赖gcc环境 #yum install gcc-c++ 2.pcre:(Perl Compatible Regular Expressions)是 ...
- java使用Redis8--3.0集群
Redis集群至少需要3个主节点 # cd /usr/redis 创建一个目录 # mkdir cluster # cd cluster 1.复制一个配置文件 # cp ../redis.conf 9 ...
- 零基础学习Python数据分析
网上虽然有很多Python学习的教程,但是大多是围绕Python网页开发等展开.数据分析所需要的Python技能和网页开发等差别非常大,本人就是浪费了很多时间来看这些博客.书籍.所以就有了本文,希望能 ...
- 10分钟教你用Python打造天气机器人+关键字自动回复+定时发送
01 前言 Hello,各位小伙伴.自上次我们介绍了Python实现天气预报的功能以后,那个小程序还有诸多不完善的地方,今天,我们再次来完善一下我们的小程序.比如我们想给机器人发“天气”等关键字,它就 ...