当关键参数是EF DbContext时,我该如何编码一种可重用的方法?

时间:2019-06-07 19:46:15

标签: asp.net-mvc vb.net entity-framework dbcontext dry

我有4个不同的SQL数据库,它们存储相似的数据;它们都是基于相同的模型。它们根据数据版本,使用位置等而有所不同。

Db1Context
Db2Context
Db3Context
Db4Context

初始化后,我需要确保每个数据库都有一个父记录,因此我运行的方法看起来像这样:

Sub EnsureATableExists()
  Dim theDb = New Db1Context
  Dim parentTable = theDb.parentTables.Where(Function(x) x.somedata = "somedata").FirstOrDefault()
  If parentTable Is Nothing Then
    parentTable = CreateTable()
    theDb.parentTables.Add(parentTable)
    theDb.SaveChanges()
  End If
End Sub

但是我目前有4种方法冒犯了我的DRY。但是我不怎么写这种方法以供重用,因为DbContext的声明是唯一的,而且我无法真正参数化要传递的DbContext。

我认为有一些通用的技术可以对此进行编码,并且希望能被教导。

在下面的每个评论中添加了其他代码:

这是我当前的情况。使用上面列出的不同名称和相应的连接字符串再重复3次。

我将vb.net转换为C#,并相信我将能够将提供的所有示例转换回vb.net。

public class Db1Context : DbContext
{
    public Db1Context() : base("Db1Connection")
    {
    }

    public Db1Context (string connectionString) : base(connectionString)
    {
    }

    public DbSet<Table1> Table1s { get; set; }
    public DbSet<Table2> Table2s { get; set; }
}

我将如何定义要继承的类,在其中可以定义新的连接字符串,新的Db1-Db4上下文在继承时会是什么样?

0 个答案:

没有答案