手把手教你調試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源碼調試旅途吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM