使用EF Core在ASP.NET核心中使用MySQL提供程序的NotImplemented Exceptions

asp.net-core c# entity-framework-core mysql

我正在構建一個ASP.NET Core 1.1.0應用程序,需要使用Entity Framework Core訪問現有的MySQL數據庫,我正在Visual Studio 2015中構建所有最新的更新。我開始使用“官方”MySQL提供程序(MySql.Data.EntityFrameworkCore),但是與Pomelo prvider(Pomelo.EntityFrameworkCore.MySql)有同樣的問題。

注入到我的Home控制器中的上下文對象具有各種NotImplemented異常,如圖中所示。會員是我的DBSet館藏之一,使用會員POCO。 (順便說一句,我不打算使用遷移,因此這不是一個因素。)在我嘗試訪問數據之前,這是上下文對象注入控制器後的狀態。

在控制器構造函數中的本地窗口

典型消息的完整細節是:

((Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure)this.db.Members).Instance'拋出了類型'System.NotImplementedException的異常

我不認為我的project.json文件中有任何有趣的內容,但相關的行是:

"Pomelo.EntityFrameworkCore.MySql": "1.1.0",
"Pomelo.EntityFrameworkCore.MySql.Design": "1.1.0"

在ConfigureServices方法的Startup.cs中,我有以下語句:

string connectionString = Configuration.GetConnectionString("ManageRCNConnection");
services.AddDbContext<MembersContext>(options => options.UseMySql(connectionString));

在這一點上,事情非常簡單。

到目前為止,我的Google-foo已讓我失望,試圖弄清楚出了什麼問題。

誰能給我一個關於問題是什麼的線索?

謝謝!

更新 :如果我忽略了@Tseng建議的結構中的錯誤,我第一次嘗試從數據庫中獲取實體時會出錯。

這是我的MembersContext的代碼。我刪除了一些屬性,但它們只是更多的DbSet集合。

public class MembersContext : DbContext
{
    public MembersContext(DbContextOptions<MembersContext> options) : base(options)
    { }

    public DbSet<Member> Members { get; set; }
    public DbSet<FamilyMember> FamilyMembers { get; set; }
    public DbSet<Membership> Memberships { get; set; }
    ...
}

我沒有使用上下文工廠,可能是問題嗎?

熱門答案

嗯,這是一個令人沮喪的過程,但我終於解決了這一切。非常感謝@Tseng的問題和評論,這有助於推動我朝著正確的方向前進。

首先,我轉而使用Pomelo MySQL提供程序。官方MySQL提供程序是預發布的,但我認為至少可以開始這個新項目。截至今天,情況並非如此。 (Sapient Guardian似乎也有一個可靠的提供商,但我不需要嘗試。)

其次,我意識到我的對像上下文類有些不對,而且它是我問題的根源。所以我回去讓腳手架上班。我嘗試了很多東西,但這就是我的project.json文件的依賴項部分的相關部分如何結束:

"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Design": "1.1.0",
"Pomelo.EntityFrameworkCore.MySql": "1.1.1-prerelease-10000",
"Pomelo.Data.MySql": "1.0.0",
"Pomelo.EntityFrameworkCore.MySql.Design": "1.1.1-prerelease-10000" },

這似乎是腳手架和遷移所需的所有包,儘管我沒有使用遷移。我不需要在文件的工具部分添加任何內容。

然後此命令在Visual Studio 2015中的程序包管理器控制台中工作:

Scaffold-DbContext "<connection string>" Pomelo.EntityFrameworkCore.MySql -OutputDir Models

瞧!正確的對像上下文以及實體類。 (我希望dotnet ef命令也能正常工作,但沒試過。)

之後,我遇到了一些問題:“無法將類型'System.String'的對象強制轉換為'System.Byte'。”一個實體對像中的錯誤。結果是因為提供程序(或者MySQL連接器)在.NET Core中的字段和字符串存在一些問題。我將這些字段更改為varchar,一切都很好。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因