下载源代码

打开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. CentOS7安装HDP集群

    之前安装大数据组件都是一个一个手动安装的,最多弄一个脚本自动安装.手动安装麻烦不说,还没有可以监控集群的可视化界面,而且组件的稳定性也是个问题. 所以我们应该试一试HDP和CDH这种企业级的hadoo ...

  2. C#将unix时间戳转换成.net的DateTime类型的代码

    下面的内容是关于C#将unix时间戳转换成.net的DateTime类型的内容. DateTime epoch = new DateTime(1970,1,1,0,0,0,0, DateTimeKin ...

  3. vue+vuex+axios实现登录、注册页权限拦截

    1.修改config文件夹里的dev.env.js里的BASE_API,把地址改成请求后端的公共部分 1 BASE_API: '"http://192.168.xx.xx"', 2 ...

  4. Python中文繁简体转换工具

    Openccpy ___ _____ __ ___ ___ ___ _____ __ __ / __`\/\ '__`\ /'__`\/' _ `\ /'___\ /'___\/\ '__`\/\ \ ...

  5. C 语言 优先级

    最高1 优先级举例 -a

  6. Spring Boot——Linux 启动方式

    1.前台启动:(ctrl+c会关闭程序) java -jar    ****.jar 2.后台启动:(& 后台启动) java -jar    ****.jar & 3.控制台输出启动 ...

  7. 在下载SOPC代码的过程中遇到的一些错误

    (1)Error (209015): Can't configure device. Expected JTAG ID code 0x02D120DD for device 2, but found ...

  8. oracle增加记录谁在连接你的数据库

    我们都知道在v$session 中记录着客户端的机器名称,但是没有IP , 如果记录clinet ip 呢? 有两种思路: ①    利用trigger,后面就是这种方式 ②    利用 DBMS_S ...

  9. 关于C#关闭窗体后,依旧有后台进程在运行的解决方法

    http://www.cnblogs.com/HappyEDay/p/5713707.html 这里粘贴原文权当备份了. C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinFo ...

  10. 2018-2019-2 网络对抗技术 20165304 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165304 Exp3 免杀原理与实践 免杀原理及基础问题回答 一.免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. ...