实体框架5 - 扩展DBContext类

时间:2014-10-03 15:28:57

标签: c# vb.net entity-framework entity-framework-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在它的定义中不是一个部分类(这会否定上面提到的答案),但我也认为我知道的太少,可能只是做了一些愚蠢的错误。< / p>

非常感谢任何帮助/指导!!

另外,我知道这个示例代码是用VB.net编写的,但我同样熟悉c#/ VB.net解决方案。

谢谢!

1 个答案:

答案 0 :(得分:2)

按原样,您在自己的程序集中创建一个名为DbContext的新类。类型DbContext的所有成员(变量,属性等)(如果您还没有使用完全限定名称)现在将被映射&#34;这种类型。

来自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