お世話になります。
DbContextを継承したコンテキストクラスが保持するプロパティについて、コンテキストクラスはどのような集合(Entityの集まり)とするべきでしょうか。
例えば、
・データベースそのものとし、使用するテーブル(Entity)をすべて定義する
・任意のまとまりとする(ex 画面(MVCではコントローラ)で使用するテーブルをプロパティに定義する 等)
・Entityと1対1(これはないでしょうが)
等々、ガイドライン的なものも見つけれなかったため、ご教授、もしくはご意見いただけますでしょうか。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答3件
1
他の方の回答とダブるとことがありますが・・・
DB First でも Code First でも、好むと好まざるとにかかわらず、
・データベースそのものとし、使用するテーブル(Entity)をすべて定義する
ということにせざるを得ないと思います。
例えば、Microsoft が提供しているサンプルデータベース AdventureWorksLT から DB First で EDM を作る場合、
Visual Studio でプロジェクトに EDM を作成するには、項目の追加で ADO.NET Entity Data Model を使います。
ウィザードに従って .edmx ファイルを完成させると以下のようになります。
コンテキストクラスは以下のようになります。
投稿2018/10/25 07:36
総合スコア17927
1
Entity Framework 6.xの話です。
Entity Frameworkを使った構築の方法はモデルファースト、コードファースト、DBファーストとあります。
どれでも良いのですが、Entity FrameworkはDBの機能や.Netの機能の一部しか使えません。
ですから、Entity Frameworkを気分よく使おうとおもったらEntity Frameworkを使うことを前提としたモデリングが必要になってきます。
言ってみればEntity Framework-Firstですね。
そこで、ガイドライン的なものがあるのではと思うのもわからなくはないです。
しかし、モデリングに制約こそ多いですが、Entity Frameworkは単なる道具ですからDBの利用-構築まで言及することはあり得ません。
Entity FrameworkではDbContextに対してDbConnectionは一つだけで、DbSetは複数持てる
それだけです。
一つのデータベースに対して複数のDbContextがあってもかまいません。
個別のマイグレーションも可能です。
投稿2018/10/25 05:45
総合スコア4150
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
1
ベストアンサー
こんにちは。
ほぼEntityFrameworkCore専門なので、その観点での回答ですが。
DBからscaffoldしてみればわかりますが、1つのDbContextがDBそのものとなるのがまずは基本となります。これはアプリとDBが一対一となるような標準的なシステムの場合です。
もし、システム外のツールやコンソールアプリケーションを作る際に既存DBの一部を利用したいだけの用途であれば、必要最低限のカラムを持たせたテーブルマッピングクラスのみを手で書いてしまえば良いです。読むだけなら本当にデータが必要なカラムだけあればよく、書く場合はデータを入れなければならないカラムをもれなく定義します。
EFをマイグレーションに利用する予定があるなら、当然ですが1つのDbContextにDBの全情報を抜けなく定義しておく必要があります。
複数のプロジェクトにまたがって一つのDBを利用するなら、DBを完全マッピングしたDbContextとそのテーブルを表すクラスのみを持つアセンブリを作成しておき、それを使い回すというのも良いと思います。
とにかく、「1つのシステムが2種類以上のDbContextを利用することは決してない」ということを念頭に置いて考えてみると良いでしょう。
投稿2018/10/25 05:31
総合スコア4045
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
Q&A
解決済
DefaultTableModelのremoveRow()メソッドに関して
回答2
クリップ1
更新
2023/05/21
Q&A
解決済
spring bootで新規登録機能を作成したい。
回答1
クリップ0
更新
2023/06/02
Q&A
解決済
VBA実行時エラー'1004':SQL構文エラーの修正方法
回答1
クリップ0
更新
2023/06/02
Q&A
受付中
2つのテーブルを条件に従い可能な限り正確に突き合わせたい
回答3
クリップ0
更新
2023/06/01
Q&A
解決済
SQLiteで正規化されたDBにデータを追加したい
回答1
クリップ0
更新
2023/05/21
Q&A
解決済
SQL でGroup化した結果を条件にしてSELECTを発行したい
回答3
クリップ0
更新
2023/05/26
Q&A
解決済
縦持ちデータのクエリを横持ちデータに変換したい
回答4
クリップ0
更新
2023/05/08
意見交換
受付中
Excelに「CSV書き出し時にダブルクオーテーションで囲む」オプションが無いのはなぜでしょうか
回答8
クリップ0
更新
2023/05/18
同じタグがついた質問を見る
Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。
C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2018/10/26 00:41
2018/10/26 00:49
2018/10/26 01:06