Entity Framework 6源码学习--设置调试EF环境
下载源代码
打开https://github.com/aspnet/EntityFramework6下载源代码。
建立调试解决方案
建立一个EntityFramework.Sample.sln在EntityFramework6根目录,建一个Console工程在src目录下,再将EF源代码文件夹中的EntityFramework和EntityFramework.SqlServer加入到解决方案中。如下图所示:


删除延迟签名
打开EntityFramework、EntityFramework.SqlServer项目属性页,发现签名页签下面的”Delay sign only“被勾上,这样生成的程序集项目无法进行调试,将Sign the assembly取消勾选。如下图所示:

添加项目引用
在EntityFramework.Sample中添加对EntityFramework、EntityFramework.SqlServer这两个项目的引用。如下图所示:

建立测试数据库
打开Microsoft SQL Server Management Studio,创建DB,名字为EFDB,然后选中新创建DB点击菜单栏New Query。
USE [EFDB]
GO /****** Object: Table [dbo].[UserInfos] Script Date: 6/15/2018 1:18:35 PM ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE TABLE [dbo].[UserInfos](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Email] [nvarchar](max) NULL,
[QQ] [nvarchar](max) NULL,
[Position] [nvarchar](max) NOT NULL,
[FirstLevel] [nvarchar](max) NOT NULL,
[SecondLevel] [nvarchar](max) NOT NULL,
[Mobile] [nvarchar](max) NULL,
CONSTRAINT [PK_UserInfos] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
编写测试代码
在EntityFramework.Sample项目中修改Program.cs, 添加EFDBContext.cs和User.cs文件。
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EntityFramework.Sample
{
class Program
{
static void Main(string[] args)
{
using (var context = new EFDBContext("Server=10.1.55.166;Database=EFDB;Password=1qaz2wsxE;User ID=sa"))
{
var users = context.Users.ToList();
Console.WriteLine("{0,6} {1,5} {2,20}", "ID", "Name", "Email");
foreach (var user in users)
{
Console.WriteLine("{0,6} {1,5} {2,20}", user.Id, user.Name, user.Email);
}
Console.ReadKey();
}
}
}
}
User.cs
using System.ComponentModel.DataAnnotations.Schema; namespace EntityFramework.Sample
{
[Table("UserInfos")]
public partial class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string QQ { get; set; }
public string Position { get; set; }
public string FirstLevel { get; set; }
public string SecondLevel { get; set; }
public string Mobile { get; set; }
}
}
EFDBContext.cs
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EntityFramework.Sample
{
public class EFDBContext : DbContext
{
public EFDBContext(string connectionString)
: base(connectionString)
{
} public IDbSet<User> Users { get; set; }
}
}
开始调试
重新生成成功后,开始运行调试,成功进入EntityFramework源代码断点。 但是在运行时加载EntityFramework.SqlServer程序集失败,虽然上面去掉强签名,但是加载的时候仍然存在强签名,最后Debug跟踪,发现源码中默认没有给Provider会默认加载EntityFramework.SqlServer,并且是带有强签名的,只需要把这里的强签名去掉即可,如下图所示:

总结
设置调试环境,对于理解EntityFramework工作原理和学习源代码尤其重要,但这不是目的,深入了解其代码执行才是目标。
Entity Framework 6源码学习--设置调试EF环境的更多相关文章
- 手把手教你调试Entity Framework 6源码
0 摘要 本文讲述在Visual Studio 2013(VS 2013)下调试Entity Framework 6(EF 6)源码的配置过程.原则上,VS 2012也适用. 之前打算编写<E ...
- MySQL源码学习——DBUG调试
一.前言 在规模稍微大点的项目中,为了方便快速找到bug的所在,我们往往需要在代码中加入一些调试用的代码,比如加入一些printf,打印出一些重点的信息:加入assert,进行断言判断.这些比较随意的 ...
- Zookeeper 源码学习(一)环境搭建
前言 最近准备学习 Zookeeper,想从 Zookeeper 开始逐步深入了解各类中间件,学习分布式计算. 下载源码 执行指令,下载代码: git clone https://github.com ...
- lua源码学习篇一:环境部署
研究生即将毕业,答辩完成后,这几天有些时间.开始写一些自己的东西,记录自己的学习历程. --前言 本着学习和交流的原则,本文的内容仅供参考,而不是权威版本,如有任何问题,欢迎指出. --声明 跨专业考 ...
- 【mybatis源码学习】调试mybatis的第一个程序
[一].基础知识准备 mybatis-config.xml配置文件的结构 MyBatis配置文件中大标签configuration下子标签包括: configuration |--- properti ...
- 源码学习之ASP.NET MVC Application Using Entity Framework
源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...
- [Android FrameWork 6.0源码学习] View的重绘过程之WindowManager的addView方法
博客首页:http://www.cnblogs.com/kezhuang/p/关于Activity的contentView的构建过程,我在我的博客中已经分析过了,不了解的可以去看一下<[Andr ...
- Vue源码学习(一):调试环境搭建
最近开始学习Vue源码,第一步就是要把调试环境搭好,这个过程遇到小坑着实费了点功夫,在这里记下来 一.调试环境搭建过程 1.安装node.js,具体不展开 2.下载vue项目源码,git或svn等均可 ...
- Tomcat源码学习(1)
Tomcat源码学习(1) IntelliJ IDEA 17.3.3 导入 Tomcat 9.0.6源码 下载源码 tomcat_9.0.6 启动 IDEA. 点击 Open,选择刚才下载的文件解压后 ...
随机推荐
- 获取cpu和内存使用情况
public class SystemInfo { [DllImport("kernel32")] public static extern void GetSystemDirec ...
- oracle_hc.sql
select event,count(1) from gv$session group by event order by 2;exec dbms_workload_repository.create ...
- php 关于laravel5.7框架
一.配置 首先说下配置,安装node.js .npm .cmd 命令行 node -v .npm -v 若已安装出现版本号,若无自行百度 安装compaser 通过compaser命令安装lara ...
- Unity的Write Defaults->从一个例子谈起
Write Defaults是什么? 在Unity的Animator中点击任何一个手动创建的State,我们就会在Inspector面板中看到下图的WriteDefaults选项 (图1,Animat ...
- SQLFullbackup
/* ==Scripting Parameters== Source Server Version : SQL Server 2016 (13.0.1601) Source Database Engi ...
- 用SVG做background image
1 用utf8格式, 需要 双引号“”替换为单引号,而且采用url encode编码,例如# 替换为 %23, body { background-image: url("data:imag ...
- mpvue
使用mpvue开发小程序 首先安装 我们使用@vue/cli 无法使用vue init 可以全局安装一个@vue/cli-init npm install -g @vue/cli-init 然后初始化 ...
- http(数据格式)、postman(数组、id、断言) 小知识必看啊
- ubuntu10.04 搭建海思开发环境
(1)Ubuntu 10.04.4 LTS (Lucid Lynx) 下载地址:http://old-releases.ubuntu.com/releases/lucid/ (2)passwd roo ...
- MSMQ—确认队列和响应队列
一.MSMQ——消息的响应(响应队列) 如果需要从接收程序中获得比确认消息更多的信息(消息确认参考二),就可以使用响应队列.响应队列类似于一般队列,但原始发生程序吧该队列用作接收程序,原始接收 程序把 ...