質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

6629閲覧

MySQL で ADO.NET Entity Data Model を作成

shun1

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

1クリップ

投稿2018/10/12 08:28

編集2018/10/16 05:15

ASP.net MVC5でADO.net Entity DataModelのデータベースからCoad First を使用して
Webアプリを作っていますが、ウィザードの途中でウィザードが終了してしまい、困っております。
対処法などでアドバイスなどを教えていただけるでしょうか?

•Visual Studio 2017 (C#)
•MySQL Server 8.0.12
•EntityFramework 6.2.0
◦MySql.Data 8.0.12
•MySql.Data.Entity 6.10.8
•MySql.Web 8.0.12
•MySQL mysql connector net 8.0.12
•mysql for visualstudio 1.2.8

■やったこと

VisualStudioのサーバーエクスプローラーから、データ接続>OK

同じく、テーブルのデータ取得>OK

■Web.conigの中身
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider></providers>
</entityFramework>
<connectionStrings>
<add name="TestModel" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=WebApp.Models.TestModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
<remove name="LocalMySqlServer" /><add connectionString="" name="LocalMySqlServer" providerName="MySql.Data.MySqlClient" /></connectionStrings>

MVCのフレームワークを使用して環境設定をしているところですが、EntityDataModelの作成をしようとしています。
■手順
・プロジェクト内になる「Models」フォルダを右クリック > 追加 > 新しい項目 を選択
・Data > ADO.NET Entity Data Model を選択し、名前を指定し、追加
今回は、「DBModel」としています。
•Entity Data Modelウィザード「データベースからCode first」を選択 > 次へ
•新しい接続ボタンを押下します。
•データソースは、「MySQL Database」を選択 > 続行
•各接続情報を入力 > OK
(テスト接続は成功しました。)
•「はい、重要情報接続文字列に含めます。」を選択、「App.Configに保存」にチェックし、次へ

次の画面「データ接続の選択」画面で
ラジオボタン項目「Entity Framework 6.X」が一瞬表示されますが、エラーメッセージも表示されずに終了してしまいます。

参考としたサイト
https://qiita.com/HAGITAKO/items/782e447ef11abdcb17cc

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/13 01:06

失礼ながら、Cord First というのが、そもそもどういうものか、質問の文面を拝見すると、理解されてないように思えますが、そのあたりは大丈夫なんでしょうか? 全体的なシナリオを含めてやりたいことを書いていただけませんか。
shun1

2018/10/15 00:46

国語力がなくすみません。2年前くらいに VisualStudio2015 ASP.net MVC5 + OralcleでWebシステムを作ったのである程度は理解していると思います。手順を追記させていただきました。
退会済みユーザー

退会済みユーザー

2018/10/15 01:24 編集

既存の DB が存在していて、それをベースに Entity Data Model を作成してアプリで利用するのは、Code First ではなくて、DB First と言うと思うのですが? Code First というのは、DB が存在しない状態で、アプリのコードをベースに DB を生成することのはずです。
shun1

2018/10/15 01:32

既存の DB が存在していて、それをベースに Entity Data Model を作成してアプリで利用しますが、ウィザード上の選択では「データベースからのCode First」となっています。説明部にも「既存のデータベースに基づいてCode Firstモデルを作成します」との文言があるので正しい認識でいますが、間違えていますかね?
退会済みユーザー

退会済みユーザー

2018/10/15 02:18

「データベースから Code First」は、ウィザードで表示される説明にあるように "既存のデータベースに基づいて Code First モデルを作成します" というもの、つまり EF Code First の機能を使って DB を生成するためのコードを作成するためのもののはずです。(実際に使ってみると接続してデータを取得できるのですが、保証の限りではなさそうです)
退会済みユーザー

退会済みユーザー

2018/10/15 02:20

そこは「データベースから EF Designer」を選ぶべきと思います・・・が、それが問題の原因ではなさそうです。でも、物は試しということで一度やってみてはいかがですか?
shun1

2018/10/15 02:29

「データベースから EF Designer」を選んで、「■手順」の記述内容で進めましたが、「データ接続の選択」画面で終了してしまいます。Web.conigの記述が間違えているんですかね??
shun1

2018/10/15 04:33 編集

ご連絡ありがとうございます。自分もMYSQLのアダプターなどに問題があるのかな?と思っていろいろとググっていましたが解決できずに困っています。作業が止まってしまっているので。mysql connector net 8.0.12が問題なんですかね??
退会済みユーザー

退会済みユーザー

2018/10/15 05:13

Visual Studio Community 2015 のウィザードのみを使って EF5 ベースで EDM を作成することで良ければ紹介しますが? 最新版でなければダメということですと回答は持ってません。
shun1

2018/10/15 05:24

ご親切にありがとうございます。VisualStudio2017はProfesionalを購入しており、2015は現行の端末には入っていない状態です。ちなみに、「mysql connector net」のバージョンは 8.0.12を使っておられますか?単純なウィーザードの使い方でしたら以前作成した経験があるので理解はできています。
shun1

2018/10/15 05:33

すみません。参考としてVisual Studio Community2015での対処方法を教えていただいてもよろしいでしょうか?
退会済みユーザー

退会済みユーザー

2018/10/15 05:33

興味がなければ紹介しても意味がないので止めておきます。自分が使っている MySQL 関係のバージョンは上のコメントで紹介した記事に書いてあります。
退会済みユーザー

退会済みユーザー

2018/10/15 05:35

コメントが前後してしまいました。自分が知っている唯一のできる方法を回答欄に書いておきます。
退会済みユーザー

退会済みユーザー

2018/10/15 06:05 編集

Connector/NET 関係の dll は GAC にインストールされ、machine.config が書き換えられますが、それは理解していますか? それをやるなら私が上に書いたコメントで紹介した記事にあるように 6.9.8 まで落としてみてはいかがですか?
退会済みユーザー

退会済みユーザー

2018/10/15 06:08

上のコメントで質問者さんが書いた「参考サイト」の URL は Not Found です。
shun1

2018/10/15 06:44 編集

ご指摘ありがとうございます。その場合、MySQL.Data、およびMySQL.Webも6.9.8にダウングレードする必要があるんですよね。試してみます。(参考サイトのURLを更新しました。すみません。)
退会済みユーザー

退会済みユーザー

2018/10/15 06:50

いえ、質問者さんのケースで 6.9.8 でなければならないかは分かりません。自分の環境で TableAdapter 構成ウィザードを使うときは MUST だったというのは確かですが。とりあえず今のままで、後で回答欄に書くことを試してみることをお勧めします。
shun1

2018/10/15 06:53

ありがとうございます。回答お待ちしております。
shun1

2018/10/16 04:36

SurferOnWwwさんのご協力のおかげで、とりあえずウィザードの画面が最後まで表示されました。ただ、生成後にEntityCommandExecutionExceptionが発生するため、別途調査が必要となっています。
guest

回答2

0

自己解決

下記環境と設定を行ったらウィザードの作成画面が正常に表示されました。
ただ、生成後にEntityCommandExecutionExceptionが発生するため、別途調査が必要となっています。

1.すでに "Connector/NET" と "MySQL for Visual Studio" をインストールしていた場合は、MySQL Installerから削除する。

2."MySQL for Visual Studio" v2.0.5 CTP (MySQL for Visual Studio).をインストールする。
注: Connector/NETよりも先にMySQL for Visual Studioをインストールしてください。

3."Connector/NET" v6.9.10 (Connector/Net)をインストールする。

4.Visual Studio Professional 2017 でprojectを新規作成する。

5.Nugetパッケージの管理より"EntityFramework" v6.2.0を検索し、インストールする。

6.ソリューションエクスプローラーの参照を右クリックして参照の追加を選択。ダイアログの参照ボタンを押下してMySql.Data.dllとMySql.Data.Entity.EF6.dllを下記pathより設定する。
C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.dll
C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.Entity.EF6.dll

7.Web.ConfigのentityFrameworkタグのprovidersに下記タグを追加する。
<entityFramework>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>
</entityFramework>

8.ソリューションをリビルドする。

投稿2018/10/16 04:34

shun1

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

上の私のコメントで「Visual Studio Community 2015 のウィザードのみを使って EF5 ベースで EDM を作成することで良ければ紹介しますが?」と書きましたが、それを以下に書きます。

まず、自分が使っている環境ですが以下の通りです。

・Windows 10 Pro 64-bit
・Visual Studio 2015 Community Update 3
・MySQL Community Server 5.7.17
・MySQL for Visual Studio 1.2.6
・Connector/Net 6.9.8

MySQL 関係はすべて MySQL Installer 5.7.17 でインストールしたものですが、以下の記事に書いてあるように MySql.Data.dll のバージョン不整合の問題があったので Connector/NET を 6.9.9 から 6.9.8 に変更しています。

MySQL での TableAdapter 構成ウィザード不具合
http://surferonwww.info/BlogEngine/post/2018/02/10/tableadapter-configuration-wizard-does-not-work-properly-for-mysql.aspx

まずまっさらな Windows Forms アプリのプロジェクトを Visual Studio のテンプレートを利用して作成します。質問者さんのアプリは ASP.NET MVC とのことですが、Entity Data Model 作成については同じことです。

4.6 Tutorial: Using an Entity Framework Entity as a Windows Forms Data Source
https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-entity-framework-winform-data-source.html

NuGet で EntityFramework, MySql.Data, MySql.Data.Entity のインストールは行わないことに注意してください。それをやると質問者さんと同じ問題に遭遇すると思います。

操作の過程で EF5 が自動的にインストールされ参照設定に追加されます。MySQL 関係の .dll は、どのようにしているのか未確認ですが、たぶん GAC にインストール済のものを使うように設定されるのではないかと思います(参照設定もされないので他には考えられません)。

チュートリアルに書いてあるデータベース world は MySQL Installer 5.7.17 を使うとインストール済みで使える状態になっています。なければ、チュートリアルに書いてある MySQL Documentation page から入手できるそうです。

チュートリアルの手順に従って進めていくと途中でチュートリアルには書いてない以下の画像の警告が出るかもしれませんが、[次へ(N) >]をクリックして進めてください。

イメージ説明

MySQL Server 5.7.6 以降ではバグ(?)があるそうで、[次へ(N) >]をクリックで以下のエラーが出るかもしれません。

次の例外によりモデルを生成できません: 'System.Data.StrongTypingException: テーブル 'TableDetails' の列 'IsPrimaryKey' の値は DBNull です。 ---> System.InvalidCastException: 指定されたキャストは有効ではありません。

その場合は以下の stackoverflow の記事の回答に従って対処してください。

MySQL - Entity : The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull
https://stackoverflow.com/questions/33575109/mysql-entity-the-value-for-column-isprimarykey-in-table-tabledetails-is

対処後、再度チュートリアルの「Adding an Entity Data Model」に従って作業すれば完成するはずです。

イメージ説明

ここまで出来たら、一旦ビルドして、EDM を使えるようになるはずです。

例えば、以下のようなコードを書けば、

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsMySqlEdm2 { public partial class Form1 : Form { private DataGridView dataGridView1; private BindingSource bindingSource1; private worldEntities context; public Form1() { InitializeComponent(); this.dataGridView1 = new DataGridView(); this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; this.bindingSource1 = new BindingSource(); this.dataGridView1.DataSource = this.bindingSource1; this.Controls.Add(this.dataGridView1); this.context = new worldEntities(); var data = from c in context.city where c.CountryCode == "JPN" select new SelectedCities { Name = c.Name, District = c.District, Population = c.Population }; this.bindingSource1.DataSource = data.ToList(); } } public class SelectedCities { public string Name { get; set; } public string District { get; set; } public int Population { get; set; } } }

以下の結果が得られます。

イメージ説明

ちなみに、App.config の設定は自動的に行われます。上の例では以下のようになります。

<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> </startup> <connectionStrings> <add name="worldEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=rkt81141;persistsecurityinfo=True;database=world&quot;" providerName="System.Data.EntityClient" /> </connectionStrings> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> </entityFramework> </configuration>

投稿2018/10/15 06:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shun1

2018/10/15 08:53

丁寧な解説に感謝いたします。 ・Connector/Net 6.9.8 にダウングレードして手順通りに試してみました。 また、Nugetでのインストールもしない状態にしました。 「バージョンの選択」ダイアログまでは表示され、同じ内容の警告が出ていました。 ただ、[次へ(N) >]をクリックすると、そのままダイアログが閉じて終了してしまいます。 ちなみに、プロジェクトの参照にはMySQL.DataやMysql.WebEntityFrameWorkなどは表示されない状態です。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/10/15 09:55

とすると、自分には分からないですね。 「ASP.net MVC5 でコードファースト」とか書くと中身を見ないでスルーする人が多いと思いますので、「MySQL で ADO.NET Entity Data Model を作成」というタイトルにして、ASP.NET ではない C# のアプリの話として、新たに別のスレッドを立てて質問し直した方が良いかもしれません。
退会済みユーザー

退会済みユーザー

2018/10/15 22:17 編集

一つだけ気がついたことを書きます。 質問者さんの環境の MySQL for Visual Studio のバージョンは 1.2.7 とのことですが、そうすると上に紹介した自分のケース (1.2.6) とは Visual Studio が使う Connector/NET のバージョンが異なるかもしれません。その辺りを調べてみてはいかがですか?
shun1

2018/10/16 04:58

ご指摘ありがとうございます。最終的にはMySQL for Visual Studioのバージョンは、結局2.0.5、Connector/NETは6.9.10で実行してみました。他のバージョンで試してみたほうがいいですかね?
退会済みユーザー

退会済みユーザー

2018/10/16 07:35

それは自分にはコメントできないです。今のままで EntityCommandExecutionException の問題が解決しなくて結局使えない状況であれば、上のコメントにも書きましたが「MySQL で ADO.NET Entity Data Model を作成」というタイトルにして、ASP.NET ではない C# のアプリの話として、新たに別のスレッドを立てて質問し直した方が良いかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問