这个问题之前曾被问过几次,但我找不到任何对我有帮助的解决方案。
我有两个不同的数据库(SQLite
和postgres
),它们具有相同的DbContext
(TranslationContext
)。
我想“打开”两个数据库并互相读/写。
我需要帮助时遇到以下问题:
StructureMap
)IDbContextScopeFactory
依赖注入
如何区分它们?是否可以给他们一个实例名称,例如local
,remote
?
c.For<DbContextOptions<TranslationContext>>().Use(
new DbContextOptionsBuilder<TranslationContext>()
.UseNpgsql(new NpgsqlConnectionStringBuilder
{
Host = "10.11.12.13",
Username = "fooUser",
Password = "fooPw",
Port = 5432,
Database = "Translations",
PersistSecurityInfo = true
}.ConnectionString).Options);
c.For<DbContextOptions<TranslationContext>>().Use(
new DbContextOptionsBuilder<TranslationContext>()
.UseSqlite("Data Source= fooFilePath")
.Options);
使用IDbContextScopeFactory
这是我使用IDbContextScopeFactory
的正常方法。但是到目前为止,我一直有不同的DbContext
并且没有问题。
using (var scope = contextScopeFactory.Create())
{
var translations = scope.DbContexts.Get<TranslationContext>().Translations;
// How to get the sqlite and how to get the postgres context?
}
TranslationContext
public class TranslationContext : DbContext
{
public DbSet<DbTextTranslation> Translations { get; set; }
public TranslationContext(DbContextOptions<TranslationContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("public");
// use lower case columns
modelBuilder.ApplyConfiguration(new DbTextTranslation.DbConfiguration());
base.OnModelCreating(modelBuilder);
}
}