我正在使用具有ASP.NET标识的Entity Framework-First。在我的web.config
文件中,有以下两个连接字符串:
<connectionStrings>
<add name="DBConnection" connectionString="metadata=res://*/Catalog.CatalogsModel.csdl|res://*/Catalog.CatalogsModel.ssdl|res://*/Catalog.CatalogsModel.msl;provider=System.Data.SqlClient;provider connection string="data source=(local);initial catalog=MyDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="DBAuthConnection" connectionString="Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
我需要两个连接字符串,因为其中一个不能与EF一起使用,另一个不能与ASP.NET Identity一起使用。
现在,我需要创建一个事务,以便我可以注册用户,然后(通过一次事务)将一些其他数据保存到我的EF表中。
这是我尝试过的:
var authContext = HttpContext.GetOwinContext().Get<ApplicationDbContext>();
using (var transaction = authContext.Database.BeginTransaction())
{
var result = await UserManager.CreateAsync(aspNetUser, model.Password);
if (result.Succeeded)
{
try
{
using (var dbContext = new AtlantiaDBCatalogEntities())
{
dbContext.Database.UseTransaction(transaction.UnderlyingTransaction);
...
}
}
}
}
但是,出现以下错误:
传入的事务与当前事务不相关 连接。仅与当前连接关联的交易 可以使用。
当它们不能具有相同的连接字符串时,如何确保两个上下文共享相同的连接?