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
  • 相关阅读:
    Android Handler与多线程
    在Eclipse发展Webapp部署过程,缓存的位置
    虚拟仿真引擎消息机制
    OpenGL+VS2013+WIN7(64)组态
    注解
    ios背景更新和下载
    uva 11529
    ATMEGA16 IOport相关汇总
    【剑指offer】Q32:从1至n整1出现的次数(python)
    Android NDK进入发展
  • 原文地址:https://www.cnblogs.com/michaellfx/p/3806857.html
Copyright © 2011-2022 走看看