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

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

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

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

MySQL

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

ASP.NET

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

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

2回答

3956閲覧

ASP.NET MVC5でデータベースファーストで作成したEDMファイルやコンテキストクラスに変更を加える為、マイグレーションを実行する方法

widget11

総合スコア221

MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

MySQL

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

ASP.NET

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

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2018/10/19 09:36

環境:
windows10
Visual Studio2017
EntityFramework6.2
MySQL DATA8.10.2
MySQL DATA ENTITY6.10.8

現在ASP.NET MVCの練習としてフルスクラッチでECサイトを作成しております。
MySQL WorkBenchでER図を作り、それを元にEDMファイルを作成できると思います。
作成されたEDMファイルを見るとある程度リレーションはうまくいっていたのですが、一部のリレーションがうまくいっておりません。
EDMファイルを削除し再度作っても同じことであると思うので、コンテキストクラスを書き換えマイグレーションを行いたいです。
自身はASP.NET MVCの他にruby on railsを触っておりこのようなことは行っていたのでおそらく出来ると踏んでいるのですが、ASP.NEt MVCのリファレンスが少ない為質問致しました。
イメージ説明

これはEDMファイルのリレーションの一部なのですが、orders(注文)テーブルとproucts(製品)テーブルはn対nの関係であるためoredered_products(カート)テーブルのようなものを挟み、注文テーブルとカートテーブルを1対n、productsとorderd_productsを1対nとMySQL WorkBenchのER図で定義し、EDMファイルを作成したのですが以上の画像のようにバグなのか紐づけがされていません。
コンテキストクラスを覗いてみても、

//ECShop.context.cs //ordersテーブルのコンテキストクラス public partial class orders { public int orders_id { get; set; } public int users_id { get; set; } public int payment_id { get; set; } public int total_amount { get; set; } public string date_created { get; set; } public virtual payment payment { get; set; } } //ordered_productsテーブルのコンテキストクラス public partial class ordered_products { public int orders_id { get; set; } public int products_id { get; set; } public int amount { get; set; } }

のようにordered_productsテーブルが親、子(railsでいうhas_to、belongs_toですかね)として定義されていませんでした。
テーブルは当然複数あるのですが、ここだけではなくリレーションがうまくいっていない箇所がちらほら見受けられます。

そこでコンテキストクラスをの内容を書き換え、マイグレーションを行いEDMファイルやDBに反映させたいのですがどうすればよいでしょうか?
具体的に分からないのは、コンテクストクラス内にどのようなコードでリレーションを定義すればよいか、またどのようなコマンドをどこで行えばっよいかです。
サンプルサイトのようにコードファーストにおいてのマイグレーションはネットに少し落ちているのですがデータベースファーストの話が一つも見受けられなかったです・・・
長くなりましたがよろしくお願い致します。(ASP.NET MVCはrailsやcakeのようにコミュニティが活発でなくリファレンスが少ないせいか、初心者には非常に難しく感じます。。。)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/10/20 01:21

タイトルは「データベースファースト」となってますが、Code First、Model First とゴッチャになっているということはありませんか? 質問本文の内容を見ると Model First のようにも見えますけど。
guest

回答2

0

ベストアンサー

タイトルは「データベースファースト」となってますが、質問文を見るとどうもそのあたりが定かでないようです。

まず、本当にタイトル通り DB First で行いたいのか、それとも Model First または Code First なのかを明確にしてください。(「MySQL WorkBench で ER 図」というのは Moodel First に用いる Model を作成する作業のように思えます)

とりあえず DB First の話として少しレスします。

DB FIrst という名前のように、既存の DB が存在するという条件がまずあって、それから Visual Studio のウィザードを使って Entity Data Model を作成して利用するのが基本です。

例えば、既存のデータベースに products, orders テーブルが存在し、それに質問者さんが書かれたような orderd_products テーブルを追加する場合、まず、DB に直接 orderd_products テーブルを作成し、それから proucts テーブル、orders テーブルに FK 制約を張ることになります。

その後で Visual Studio のウィザードを利用して ADO.NET Entity Data Model を生成(既存のものがあれば再生成)することになります。

そこに ER 図でモデルを作るとか Migration という話は出てこないはずです。

Microsoft が提供している SQL Server の Northwind サンプルデータベースには、質問者さんのやりたいこととほぼ同じように Products テーブルと Orders テーブルを多対多で関連付ける Orders_Details テーブルが含まれていますので、それをベースに DB First で Entity Data Model を作った例を紹介しておきます。

Northwind をベースに Visual Studio のウィザードを利用して Entity Data Model を作成すると以下のような .edmx が生成されそれをアプリから利用するためのコードも生成され、即利用できるようになります。Orders_Details テーブルが Products テーブル、Orders テーブルを多対多で関連付けているのが分かるでしょうか?

イメージ説明

サンプルサイトのようにコードファーストにおいてのマイグレーションはネットに少し落ちているのですがデータベースファーストの話が一つも見受けられなかったです・・・

それは質問者さんが実際にやっているのは DB First ではなく、Model First だからだと思います。ホントに DB First であれば MySQL でもネットの記事は結構見つかると思います。

Model First は SQL Server でも自分はほとんど例は見たことがないし、ましてや MySQL では・・・

ASP.NET MVCはrailsやcakeのようにコミュニティが活発でなくリファレンスが少ないせいか、

ASP.NET MVC の話としてその中だけで考えているからではないのですか? Entity Framework, ADO.NET Entity Data Model, DB First, Code First, Model First, Linq to Entities の話として考えたらどうですか?

投稿2018/10/21 04:41

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

DB first で作ったEntity Data Modelを後からいじるのはとてつもなく面倒なので実質出来ないと思ったほうが良いです。
後からいじるためには、Entity Data Model作成の時[データーベースからCode first]を選択してください。
後はほぼCode Firstと一緒ですが、
Enable-Migrationsの後
Add-Migration Initial -IgnoreChanges
と-IgnoreChangesオプションが必要です。

投稿2018/10/20 01:30

hihijiji

総合スコア4150

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問