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工作原理和学习源代码尤其重要,但这不是目的,深入了解其代码执行才是目标。

原文地址:https://www.cnblogs.com/zhesong/p/EF6Debug.html

时间: 2024-08-29 09:24:01

Entity Framework 6源码学习--设置调试EF环境的相关文章

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

0  摘要 本文讲述在Visual Studio 2013(VS 2013)下调试Entity Framework 6(EF 6)源码的配置过程.原则上,VS 2012也适用. 本码蚁之前打算编写<Entity Framework 6 源码调试与分析>系列博文,现因个人健康原因,需休息较长时间,不得不放弃这一计划.离开前,把调试EF源码的办法写成教程,希望对那些像我一样的新手有所帮助. 1  正文 软件环境 操作系统: Windows 8.1 Update 1 IDE      : Visua

《Entity Framework 6 源码分析》

背景 以Code First方式编写简单代码,按源码执行过程,逐步讲解Entity Framework工作原理.本系列博文系我学习Entity Framework 6 Code First的总结之作.学习过程中参考了大量MSDN资料,因参考资料过多,且皆可从EF主页索引到,故不一一列举.所有阅读过的正式出版的书籍,详见参考文献一节.部分章节因论述需要所引用其它.NET书籍将在该章节内注明引用信息.为了分析代码,我经常访问.NET参考源码页面. 因水平有限,若有谬误,恳请指正,同时欢迎企鹅群185

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

[一].基础知识准备 mybatis-config.xml配置文件的结构 MyBatis配置文件中大标签configuration下子标签包括: configuration |--- properties |--- settings |--- typeAliases |--- typeHandlers |--- objectFactory |--- plugins |--- environments |--- |--- environment |--- |--- |--- transaction

.NET Framework源码查看与调试

1. 直接下载.NET Framework源代码(下载地址),然后用Visual Studio打开查看. 2. 在线查看,网址:http://referencesource.microsoft.com/ . Refer: A new look for .NET Reference Source http://blogs.msdn.com/b/dotnet/archive/2014/02/24/a-new-look-for-net-reference-source.aspx Configure V

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

博客首页:http://www.cnblogs.com/kezhuang/p/ 关于Activity的contentView的构建过程,我在我的博客中已经分析过了,不了解的可以去看一下 <[Android FrameWork 6.0源码学习] Window窗口类分析> 本章博客是接着上边那篇博客分析,目的是为了引出分析ViewRootImpl这个类.现在只是分析完了Window和ActivityThread的调用过程 从ActivityThread到WindowManager再到ViewRoo

struts2源码学习之初始化(一)

看struts2源码已有一段时日,从今天开始,就做一个总结吧. 首先,先看看怎么调试struts2源码吧,主要是以下步骤: 使用Myeclipse创建一个web工程 导入struts2需要的jar包 如图: 让jar包关联源文件 在上图中的jar包右键,选择properties->java source attach,如果关联成功,双击jar包下的某个class文件就会显示java源代码了. 双击.class文件,在源代码关键地方设置断点 部署工程到Tomcat Tomcat以Debug方式启动

Hadoop源码学习笔记(1) ——第二季开始——找到Main函数及读一读Configure类

Hadoop源码学习笔记(1) ——找到Main函数及读一读Configure类 前面在第一季中,我们简单地研究了下Hadoop是什么,怎么用.在这开源的大牛作品的诱惑下,接下来我们要研究一下它是如何实现的. 提前申明,本人是一直搞.net的,对java略为生疏,所以在学习该作品时,会时不时插入对java的学习,到时也会摆一些上来,包括一下设计模式之类的.欢迎高手指正. 整个学习过程,我们主要通过eclipse来学习,之前已经讲过如何在eclipse中搭建调试环境,这里就不多述了. 在之前源码初

Hadoop源码学习笔记(3) ——初览DataNode及学习线程

Hadoop源码学习笔记(3) ——初览DataNode及学习线程 进入了main函数,我们走出了第一步,接下来看看再怎么走: public class DataNode extends Configured implements InterDatanodeProtocol,       ClientDatanodeProtocol, FSConstants, Runnable {      public static DataNode createDataNode(String args[],

Android事件分发详解(三)——ViewGroup的dispatchTouchEvent()源码学习

package cc.aa; import android.os.Environment; import android.view.MotionEvent; import android.view.View; public class UnderstandDispatchTouchEvent { /** * dispatchTouchEvent()源码学习及其注释 * 常说事件传递中的流程是:dispatchTouchEvent->onInterceptTouchEvent->onTouchE