【发布时间】:2021-02-05 08:41:23
【问题描述】:
我正在开发一个 .net 核心项目,该项目的要求是同时维护一个 SQLite 数据库和一个 SQL Server 数据库。我创建了两个 DbContext 文件 SqlServerContext 和 SqliteContext 并为它们创建了单独的迁移文件夹。这些文件派生自 DbContext 派生的 WorkerContext 文件。迁移工作正常,因为在两个数据库中都创建了表。但我无法同时进行数据操作。
这是 IKeyboardMouseActivityRepository。使用 SqliteContext 和 SqlServerContext 有不同的部分。使用另一部分时,我必须注释掉其中一部分。所以我现在可以一次在一个数据库中输入数据。
public interface IKeyboardMouseActivityRepository :
IRepository<KeyboardMouseActivity, Guid, SqlServerContext>
// IRepository<KeyboardMouseActivity, Guid, SqliteContext>
{
}
public class KeyboardMouseActivityRepository :
IKeyboardMouseActivityRepository,
Repository<KeyboardMouseActivity, Guid, SqlServerContext>
// Repository<KeyboardMouseActivity, Guid, SqliteContext>
{
public KeyboardMouseActivityRepository(SqlServerContext dbContext)
: base(dbContext)
{
}
// public KeyboardMouseActivityRepository(SqliteContext dbContext)
// : base(dbContext)
// {
// }
}
这是主要的 Repository 类。
public abstract class Repository<TEntity, TKey, TContext>
: IRepository<TEntity, TKey, TContext>
where TEntity : class, IEntity<TKey>
where TContext : DbContext
{
protected TContext _dbContext;
protected DbSet<TEntity> _dbSet;
public Repository(TContext context)
{
_dbContext = context;
_dbSet = _dbContext.Set<TEntity>();
}
// other methods such as Add, Remove etc.
}
我的理解是,由于在 KeyboardMouseActivityRepository 中指定了 context 参数,因此它仅适用于指定的上下文。如何修改它以使其适用于两个 DbContext 文件,并且我可以同时在两个数据库中进行数据操作?
【问题讨论】:
标签: entity-framework .net-core repository-pattern