2014-10-03 158 views
2

我不知道,如果我在這裏還是不是做錯了什麼......實體框架5 - 擴展的DbContext類

由於有點背景的,我工作的一個實體框架(V5.0)解決方案,並希望爲DBContext類添加額外的功能,所以任何tt生成的類(從DbContext繼承)都將自動具有該固有功能。

基於我看到here答案,我想這將是一個新的類,它看上去就像只需添加如下那樣容易:

Imports System.Data.Entity 
Imports System.Data.Entity.Infrastructure 

Partial Public Class DbContext 
    ... add in my methods/extra things here ... 
End Class 

但當下我創建這個類,我的整個解決方案出現與諸如DBContext not implementing IDisposable之類的事件相關的錯誤或諸如sub 'OnModelCreating' cannot be declared 'Overrides' because it does not override a sub in a base class.之類的錯誤。

基本上,如果我理解這個問題,我創建這個時刻,原來的DbContext似乎被忽略和我的解決方案假定這是唯一的DbContext類。

這會讓我相信DBContext不是定義中的分類(這會否定上述答案),但我也認爲我知道得太少,可能只是在做一些愚蠢的錯誤。

任何幫助/指導將非常感謝!另外,我知道這個示例代碼是用VB.net編寫的,但我對C#/ VB.net解決方案也很滿意。

謝謝!

回答

2

現在,您正在自己的程序集中創建一個名爲DbContext的新類。現在將所有類型爲DbContext的成員(變量,屬性等)(如果您尚未使用完全限定名稱)映射到此類型。

MSDN

您可以通過使用partial關鍵字劃分若干聲明之間的一類或結構的定義。您可以根據需要使用盡可能多的部分聲明,並根據需要使用盡可能多的不同源文件。但是,所有聲明必須位於相同的程序集和相同的名稱空間中。

的選項有:

1)亞綱:

Public Class DbContextEx 
    Inherits DbContext 
End Class 

2)創建擴展方法:

Public Module DbExtensions 

    <Runtime.CompilerServices.Extension()> 
    Public Function Test1(source As DbContext) As Object 
    End Function 

    <Runtime.CompilerServices.Extension()> 
    Public Sub Test2(source As DbContext) 
    End Sub 

End Module 
+1

謝謝你 - 我認爲是這樣的話,但其他問題讓我想知道......我在猜測最好的答案,那麼,就是去擴展路由(以免混亂實體框架tt生成器),因爲我的目標是使得即使模型被刷新(它首先是數據庫),一切都會繼續工作,並且tt文件將具有從'DBContext'而不是'DBContextEx'繼承的類 - 我認爲是這種情況,但是我對它很新,我真的很感謝你的輸入! – 2014-10-03 16:26:54

+1

是的,我同意,擴展聽起來像是最好的方法。 – 2014-10-03 16:31:30