实体框架5-扩展DBContext类
本文关键字:DBContext 扩展 框架 实体 | 更新日期: 2023-09-27 18:25:25
我不知道我是否做错了什么。。。
作为背景,我正在开发实体框架(v5.0)解决方案,并希望为DBContext
类添加额外的功能,因此任何tt生成的类(继承自DbContext)都将自动具有可用的固有功能。
根据我在这里看到的答案,我认为这就像简单地添加一个新类一样简单,如下所示:
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