2014-10-03 159 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