2012-12-05 20 views
1

下面是使用VS 2012終極我的解決方案設置:包含所有業務領域不能調試到使用實體框架(版本4.3.1)我的DbContext派生類代碼代碼優先

我有一個項目(如MyDomainModel)使用POCO類的類型。我有另一個引用MyDomainModel項目的項目(例如MyEntity),並具有在SaveChanges方法中實現定製業務邏輯(例如,在插入和修改數據時自動標記時間)的派生DbContext類(例如MyDbContext)。

我有另一個基於mstest的項目(例如MyEntity_Tests),它將測試派生的DbContext(例如MyDbContext)與已知的種子數據作爲數據庫初始化的一部分。

我的問題是,當調試測試時,MyDbContext的c#代碼中設置的斷點不會被命中。但是,如果我將諸如Debug.Print(「xxx」)這樣的行放入文件並調試相同的測試,則測試輸出將包含那些預期的輸出「xxx」。

我知道Entity Framework運行時將在場景後面生成代理dll來封裝這些dll(例如MyDomainModel.dll)。但是不能像MyDbContext那樣調試我自己的代碼對我來說真的是一個大問題。其他人在使用EF代碼時是否也有類似問題?如何解決這個問題?

回答

0

在派生的DbContext類的一行中設置斷點,開始調試,並將鼠標懸停在它上面以查看它未命中的原因。最有可能的符號不加載。當調試去加載模塊窗口右鍵單擊您的程序集,你可以檢查VS試圖加載符號。您也可以手動加載符號。請注意,如果符號與組件不匹配,則需要重建項目以獲取最新的符號。斷點未命中的另一個原因可能是因爲您的源代碼與程序集不匹配。您可以取消選中設置 - >調試中的複選框,以對與組件不匹配的源啓用調試,但是像這樣調試會很痛苦並且適得其反。再次重建應該有所幫助。我假設你正在嘗試調試你的程序集的調試版本,而不是發佈版本。

+0

我重建了所有已知的符號和代碼是同步的。有趣的是,在VS 2010中完全相同的解決方案可以很好地進行調試(注意:VS 2012和VS 2010解決方案是相互兼容的),即斷點的行爲正常。 – jhy

+0

也許在VS2010中你有一個VS2012中沒有的符號路徑?你嘗試過強制加載符號嗎? – Pawel

+0

我添加了額外的調試符號設置到VS 2012(從我的VS 2010設置複製)。問題依然存在。清楚的是,並不是MyDbContext中的任何斷點都沒有被觸發,只是我對停止感興趣的那些沒有被觸及。另外我注意到在模塊窗口中,在VS 2010中進行調試時,會加載一個名爲「EntityFrameworkDynamicProxies-MyEntity」的模塊,該模塊不會出現在VS 2012調試會話中。 – jhy

相關問題