我試圖在現有項目中嘗試模擬(使用Moq)DbSet中的DbSet,我認爲它是從VS 2012升級而來的。我得到一個錯誤,這是因爲那些DbSet <>沒有被標記爲虛擬的,所以它們不能被嘲笑。當我看到我做過的新項目時,他們被標記爲虛擬。實體類型不在現有項目中標記爲虛擬
由於這是在.edmx文件中,因爲它是自動生成的,所以我不能將虛擬添加到代碼中。有誰知道我可以設置的任何屬性使它們變爲虛擬嗎?
我試圖在現有項目中嘗試模擬(使用Moq)DbSet中的DbSet,我認爲它是從VS 2012升級而來的。我得到一個錯誤,這是因爲那些DbSet <>沒有被標記爲虛擬的,所以它們不能被嘲笑。當我看到我做過的新項目時,他們被標記爲虛擬。實體類型不在現有項目中標記爲虛擬
由於這是在.edmx文件中,因爲它是自動生成的,所以我不能將虛擬添加到代碼中。有誰知道我可以設置的任何屬性使它們變爲虛擬嗎?
在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
文件後,應自動執行。如果沒有,請嘗試右鍵單擊它並選擇「運行自定義工具」。
完美謝謝! – user441521
您正在使用哪種版本的EF? – kiziu
這是EF版本6. – user441521