Как использовать контексты Asp.Net Identity и EF Database-First в одной транзакции? - PullRequest
0 голосов
/ 14 сентября 2018

Я использую Entity Framework Database-First с удостоверением ASP.NET. В моем файле 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=&quot;data source=(local);initial catalog=MyDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 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);
                ...
            }
        }
    }
}

Но я получаю следующую ошибку:

Переданная транзакция не связана с текущей подключение. Только транзакции, связанные с текущим соединением можно использовать.

Как мне убедиться, что два контекста используют одно и то же соединение, если они не могут иметь одинаковые строки соединения?

...