EFコアでASP.NETコアでMySQLプロバイダを使用しているNotImplemented例外

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

質問

私はEntity Framework Coreを使用して既存のMySQLデータベースにアクセスする必要があるASP.NET Core 1.1.0アプリケーションをビルドしています。これはVisual Studio 2015にすべての最新アップデートをインストールしています。私は "公式" MySQLプロバイダ(MySql.Data.EntityFrameworkCore)を使い始めましたが、Pomelo prvider(Pomelo.EntityFrameworkCore.MySql)と同じ問題がありました。

私のホームコントローラに注入されたコンテキストオブジェクトには、画像でわかるように、すべての種類のNotImplemented例外があります。メンバーは、メンバーPOCOを使用して、私のDBSetコレクションの1つです。 (ちなみに、私は移行を使用するつもりはないので、それは要素ではありません)。これは、コンテキストオブジェクトがコントローラに注入されると直ちに、データにアクセスしようとする前の状態です。

コントローラのコンストラクタ内にある場合のローカルウィンドウ

一般的なメッセージの詳細は次のとおりです。

((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プロバイダはプレリリースですが、少なくともこの新しいプロジェクトを開始するには十分だと思いました。今日はそうではありません。 (サピエントガーディアンにもソリッドプロバイダーがいるようですが、試してみる必要はありませんでした。)

第二に、私は、何かが私のオブジェクト・コンテクスト・クラスについて正しくないこと、そしてそれが私の問題の原因であることに気づいた。そこで足場を働かせることに戻りました。私はいくつかのことを試しましたが、これは私の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のPackage Manager Consoleで動作しました。

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

Voila!正しいオブジェクトコンテキストとエンティティクラス。 (私はdotnet efコマンドもうまくいくと思っていますが、試してみませんでした)。

その後、「System.Byte」と入力すると、タイプ「System.String」のオブジェクトをキャストできませんでした。 1つのエンティティオブジェクトのエラー。これは、プロバイダー(または多分MySQLコネクター)が.NETコアのcharフィールドと文字列に問題があるためです。私はこれらのフィールドをvarcharに変更し、すべてが良好でした。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ