实体框架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解决方案同样满意。

谢谢!!

实体框架5-扩展DBContext类

按原样,您正在自己的程序集中创建一个名为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