標籤:style class blog code http tar
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
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 EFSrcTest2 {3 class Teacher4 {5 public int ID { get; set; }6 public string FirstName { get; set; }7 }8 }
1 namespace EFSrcTest2 {3 class SchoolContext : DbContext4 {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源碼調試旅途吧。