zoukankan      html  css  js  c++  java
  • 手把手教你调试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      : Visual Studio 2013 Update 2

    理论上,只要安装了VS 2013即可。 

    0  下载EF 6源码

    最新的源码是EF 6.1.0,需用Git获取代码。关于如何在Windows下安装配置Git,不在本文讨论范围内。

    在EF主页上找到SOURCE CODE标签,点击Clone,得到git clone地址https://git01.codeplex.com/entityframework,如下图所示。

    使用Git获取EF源码,完整代码如下图所示。

    现在,直接打开EntityFramework.sln就可以调试EF源码。下面以新建解决方案的方式,将EF源码添加到我们的项目中进行调试。

    1  建立一个控制台项目

    在VS中创建一个C#控制台项目,.NET版本可选4.5或4.5.1,建议选4.5,项目名称随意,如下图所示。其他项目类型如MVC也可以,看个人喜好。

    2  添加EntityFramework及EntityFramework.SqlServer到解决方案中

    通过添加已存在的项目到解决方案中,我们得到了标题中两个项目的引用(具体路径为你存放EF源码的路径),如下图所示。

    以同样的方式添加对EntityFramework.SqlServer项目的引用,结果如下图所示。

    在EFSrcTest项目中添加对这两个项目的引用。

    3  编译EntityFramework及EntityFramework.SqlServer项目

    这一步有两种做法:

        一是修改这两个项目的输出路径到步骤一所建的控制台项目的debug目录或者你指定的目录;

        二是编译这两个项目,然后把DLL复制到你的项目的debug或者你指定的目录,缺点是你对EF源码所作的修改,重新编译后都需要再次复制DLL到你指定的目录才能生效。不过,像我这样的初学者是不太可能修改EF源码的,所以按方式二继续。

    编译控制台项目,复制EntityFramework及EntityFramework.SqlServer项目输出的DLL及PDB符号文件到控制台项目的Debug目录下(或你指定的目录,在此不再赘述),如下图所示。

    4  配置控制台项目的App.Config文件

    这里以Code First方式进行,配置内容和Mode First、Database First有所区别,主要是连接字符串上的区别。

     1 <?xml version="1.0" encoding="utf-8"?>
     2 
     3 <configuration>
     4   <configSections>
     5     <section name="entityFramework"
     6              type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
     7              requirePermission="false" />
     8   </configSections>
     9   <startup>
    10     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    11   </startup>
    12   <entityFramework>
    13     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    14       <parameters>
    15         <parameter value="v11.0" />
    16       </parameters>
    17     </defaultConnectionFactory>
    18     <providers>
    19       <provider invariantName="System.Data.SqlClient"
    20                 type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    21     </providers>
    22   </entityFramework>
    23 </configuration>

    section节点的版本信息很关键,如果版本错了,则运行报错。

    至此,配置工作已全部完成。最后,编写几个简单的类进行调试。

    5  以Code First方式创建数据库并调试

    创建一个只包含一个表的数据库,代码如下:

    1 namespace EFSrcTest
    2 {
    3     class Teacher
    4     {
    5         public int ID { get; set; }
    6         public string FirstName { get; set; }
    7     }
    8 }
    1 namespace EFSrcTest
    2 {
    3     class SchoolContext : DbContext
    4     {
    5         public DbSet<Teacher> Teachers { get; set; }
    6     }
    7 }
     1 namespace EFSrcTest
     2 {
     3     class Program
     4     {
     5         static void Main(string[] args)
     6         {
     7             using (var ctx = new SchoolContext())
     8             {
     9                 ctx.Teachers.Add(new Teacher { FirstName = "米高" });
    10                 ctx.SaveChanges();
    11             }
    12         }
    13     }
    14 }

    现在,对第7行using (var ctx = new SchoolContext())打上断点进行调试,按F11可进入EF源码,如下图所示。

    现在,开启你的Entity Framework 6源码调试旅途吧。

    基础决定高度 Du bist immer noch in meiner Welt Silva
  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/michaellfx/p/3806857.html
Copyright © 2011-2022 走看看