实体框架5 - 扩展的DbContext类
我不知道,如果我在这里还是不是做错了什么......实体框架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解决方案也很满意。
谢谢!
现在,您正在自己的程序集中创建一个名为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
谢谢你 - 我认为是这样的话,但其他问题让我想知道......我在猜测最好的答案,那么,就是去扩展路由(以免混乱实体框架tt生成器),因为我的目标是使得即使模型被刷新(它首先是数据库),一切都会继续工作,并且tt文件将具有从'DBContext'而不是'DBContextEx'继承的类 - 我认为是这种情况,但是我对它很新,我真的很感谢你的输入! – 2014-10-03 16:26:54
是的,我同意,扩展听起来像是最好的方法。 – 2014-10-03 16:31:30