是否可以创建一个DbContext接口或抽象类,并使用它来注入不同的DbContext对象?

Nic*_*epo 6 c# asp.net entity-framework

我有一个软件产品,该数据库在SQLServer上创建数据库,并且表和列名由开发团队定义,然后使用Database First方法将模型导入到Visual Studio中,现在我们正在为其他公司开发相同类型的解决方案,使用ORACLE并为表和列请求命名约定,因此为了不更改现有代码并使用代码优先方法,我为所有类属性使用[Column]属性创建了具有正确命名约定的DbContext,但是现在,我正在尝试创建一个接口,以便我们可以注入不同的DbContext,并且在将来,我们将提供一个更加灵活的解决方案。

我是.Net的新手,但我的方法是为DbContext创建一个抽象类,并为表示表的每个类创建一个接口,因此在实现这些类中的每个类时,如有必要,我可以更改表和列的名称。我的问题是,可能吗?这是一个好方法吗?

Che*_*hen 9

不,没有。但是你总是可以像这样构建一个:

interface IDbContext : IDisposable
{
    DbSet<TEntity> Set<TEntity>() where TEntity : class;

    Task<int> SaveChangesAsync();
}

public class MyDbContext : DbContext, IDbContext
{
    public MyDbContext()
        : base("myConnectionString")
    { }

    //implementation
}
Run Code Online (Sandbox Code Playgroud)

IDbContext在需要时注射。