2016-09-27 46 views
2

我試圖在現有項目中嘗試模擬(使用Moq)DbSet中的DbSet,我認爲它是從VS 2012升級而來的。我得到一個錯誤,這是因爲那些DbSet <>沒有被標記爲虛擬的,所以它們不能被嘲笑。當我看到我做過的新項目時,他們被標記爲虛擬。實體類型不在現有項目中標記爲虛擬

由於這是在.edmx文件中,因爲它是自動生成的,所以我不能將虛擬添加到代碼中。有誰知道我可以設置的任何屬性使它們變爲虛擬嗎?

+0

您正在使用哪種版本的EF? – kiziu

+0

這是EF版本6. – user441521

回答

4

在EF6中,默認情況下,DBSet成員創建爲virtual。這不能從配置更改,但必須編輯T4模板(.tt文件)。很可能有人在之前編輯過它並刪除了virtual關鍵字。

要找到您的T4模板,請在解決方案資源管理器中展開由.edmx文件創建的樹。您會在其中找到一個.tt文件。

要再次使您的DBSet s virtual需要找到方法string DbSet(EntitySet entitySet)(默認.tt,它是行307)。這個方法創建一個屬性聲明,你可以在這裏操作它的模式。默認情況下,使用

"{0} virtual DbSet<{1}> {2} {{ get; set; }}" 

被使用。找到這個模式的版本,並根據自己的喜好進行更改(或者只是我提供的默認版本)。

編輯:如果你不能很容易地找到這個方法,嘗試搜索

DbSet <

編輯:編輯和保存.tt文件後,應自動執行。如果沒有,請嘗試右鍵單擊它並選擇「運行自定義工具」。

+0

完美謝謝! – user441521