簡體   English   中英

實體框架核心 DbContext 設置 DbConnection

[英]Entity Framework Core DbContext set DbConnection

在 .NET 框架中是 DbContext,在 EntityFramework 6 中是構造函數,我可以在其中設置 DbConnection。

在 EF .NET Core 中,我可以設置 DbContext DbConnection 嗎? 我在 DbContext 方法的 UseTransaction 中遇到異常:

Microsoft.EntityFrameworkCore.Relational.dll 中發生了“System.InvalidOperationException”類型的異常,但未在用戶代碼中處理:“指定的事務與當前連接無關。 只能使用與當前連接關聯的事務。

有誰知道如何設置 DbConnection? 還是我走錯路了?

我一直將.NET核心應用程序的啟動文件添加到數據庫上下文中,方法是將其添加到IServiceCollection並從appsetting文件中拉出字符串,如下所示:

        private void AddDatabase(IServiceCollection services)
    {
        var databaseConnectionString = Configuration.GetConnectionString("DatabseConnection");

        Check.CanConnectToDatabase(databaseConnectionString);

        services.AddDbContext<DatabaseContext>(
            options =>
            {
                options.ConfigureWarnings(
                    warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning));
                options.UseSqlServer(databaseConnectionString,
                    sqlOptions => sqlOptions.MigrationsHistoryTable(HistoryRepository.DefaultTableName, "SchemaName"));
            });
    }

如果我理解正確,則無法創建DbConnection ,因為它是受保護的 class 因此您應該獲取 DbConnection,然后設置連接字符串,最后設置 DbCollection。

var dbConnection =  (await GetDbContextAsync()).Database.GetDbConnection();
dbConnection.ConnectionString = "yourConnectinString";
(await GetDbContextAsync()).Database.SetDbConnection(dbConnection);
//Also you can test your connection
await (await GetDbContextAsync()).Database.CanConnectAsync();

也許這是一種棘手的方式,但它對我有用。 問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM