下载源代码

打开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环境的更多相关文章

  1. 手把手教你调试Entity Framework 6源码

    0  摘要 本文讲述在Visual Studio 2013(VS 2013)下调试Entity Framework 6(EF 6)源码的配置过程.原则上,VS 2012也适用. 之前打算编写<E ...

  2. MySQL源码学习——DBUG调试

    一.前言 在规模稍微大点的项目中,为了方便快速找到bug的所在,我们往往需要在代码中加入一些调试用的代码,比如加入一些printf,打印出一些重点的信息:加入assert,进行断言判断.这些比较随意的 ...

  3. Zookeeper 源码学习(一)环境搭建

    前言 最近准备学习 Zookeeper,想从 Zookeeper 开始逐步深入了解各类中间件,学习分布式计算. 下载源码 执行指令,下载代码: git clone https://github.com ...

  4. lua源码学习篇一:环境部署

    研究生即将毕业,答辩完成后,这几天有些时间.开始写一些自己的东西,记录自己的学习历程. --前言 本着学习和交流的原则,本文的内容仅供参考,而不是权威版本,如有任何问题,欢迎指出. --声明 跨专业考 ...

  5. 【mybatis源码学习】调试mybatis的第一个程序

    [一].基础知识准备 mybatis-config.xml配置文件的结构 MyBatis配置文件中大标签configuration下子标签包括: configuration |--- properti ...

  6. 源码学习之ASP.NET MVC Application Using Entity Framework

    源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...

  7. [Android FrameWork 6.0源码学习] View的重绘过程之WindowManager的addView方法

    博客首页:http://www.cnblogs.com/kezhuang/p/关于Activity的contentView的构建过程,我在我的博客中已经分析过了,不了解的可以去看一下<[Andr ...

  8. Vue源码学习(一):调试环境搭建

    最近开始学习Vue源码,第一步就是要把调试环境搭好,这个过程遇到小坑着实费了点功夫,在这里记下来 一.调试环境搭建过程 1.安装node.js,具体不展开 2.下载vue项目源码,git或svn等均可 ...

  9. Tomcat源码学习(1)

    Tomcat源码学习(1) IntelliJ IDEA 17.3.3 导入 Tomcat 9.0.6源码 下载源码 tomcat_9.0.6 启动 IDEA. 点击 Open,选择刚才下载的文件解压后 ...

随机推荐

  1. 获取cpu和内存使用情况

    public class SystemInfo { [DllImport("kernel32")] public static extern void GetSystemDirec ...

  2. oracle_hc.sql

    select event,count(1) from gv$session group by event order by 2;exec dbms_workload_repository.create ...

  3. php 关于laravel5.7框架

    一.配置 首先说下配置,安装node.js  .npm .cmd 命令行 node -v  .npm -v 若已安装出现版本号,若无自行百度 安装compaser 通过compaser命令安装lara ...

  4. Unity的Write Defaults->从一个例子谈起

    Write Defaults是什么? 在Unity的Animator中点击任何一个手动创建的State,我们就会在Inspector面板中看到下图的WriteDefaults选项 (图1,Animat ...

  5. SQLFullbackup

    /* ==Scripting Parameters== Source Server Version : SQL Server 2016 (13.0.1601) Source Database Engi ...

  6. 用SVG做background image

    1 用utf8格式, 需要 双引号“”替换为单引号,而且采用url encode编码,例如# 替换为 %23, body { background-image: url("data:imag ...

  7. mpvue

    使用mpvue开发小程序 首先安装 我们使用@vue/cli 无法使用vue init 可以全局安装一个@vue/cli-init npm install -g @vue/cli-init 然后初始化 ...

  8. http(数据格式)、postman(数组、id、断言) 小知识必看啊

  9. ubuntu10.04 搭建海思开发环境

    (1)Ubuntu 10.04.4 LTS (Lucid Lynx) 下载地址:http://old-releases.ubuntu.com/releases/lucid/ (2)passwd roo ...

  10. MSMQ—确认队列和响应队列

    一.MSMQ——消息的响应(响应队列) 如果需要从接收程序中获得比确认消息更多的信息(消息确认参考二),就可以使用响应队列.响应队列类似于一般队列,但原始发生程序吧该队列用作接收程序,原始接收 程序把 ...