🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Entity Framework

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

ASP.NET

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

Q&A

解決済

1回答

41319閲覧

c# entity framework にて、DBをコードファーストにて書く際の外部キーの設定方法

退会済みユーザー

退会済みユーザー

総合スコア0

Entity Framework

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

ASP.NET

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

0グッド

0クリップ

投稿2018/08/03 02:39

現在、c#にてmvc、entity frameworkの勉強がてらwebツールを作成しています。

DBをコードファーストで書こうと思っているのですが、外部キーの設定方法がわからないためお教え頂きたいです。

[環境」
visual studio 2017 community
c# ASP.Net MVC5
DB:visual studio 2017 communityに含まれているSQL Server

下記クラスの生成は、ADO.NET Entity Data Modelというものを使用しました。
※こちらもまだ良くわかっていないので、いろいろと調べ中です。

c#

1namespace MvcCheckHtml.Models 2{ 3 using System; 4 using System.Data.Entity; 5 using System.Linq; 6 using System.ComponentModel.DataAnnotations; 7 8 public class Clients : DbContext 9 { 10 public Clients() 11 : base("name=Client") 12 { 13 } 14 15 [Required] 16 public int ClientId { get; set; } 17 18 [Required] 19 public string ClientName { get; set; } 20 } 21 22 public class ClientDetails : DbContext 23 { 24 public ClientDetails() 25 : base("name=ClientDetails") 26 { 27 } 28 29 [Required] 30 public int ClientDetailId { get; set; } 31 32 // ※ここに、上記クラスのClientIdを外部キーとして設定したい(主キーにはしたくない) 33 public int ClientId { get; set; } 34 35 } 36 37}

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

DBをコードファーストで書こうと思っているのですが、外部キーの設定方法がわからないためお教え頂きたいです。

「外部キーの設定」というと、普通、2 つのテーブルに設定する/されるフィールドが存在するはずですが、アップされたコードはそうなってなくて意味が分かりません。

なので、アップされたコートはちょっと置いといて、Code First で SQL Server (Express または LocalDB) に Blogs, Posts という 2 つのテーブルを生成し、「1 対多」の外部制約キーを設定するチュートリアルを紹介します。

新しいデータベースの Code First
https://msdn.microsoft.com/ja-jp/data/jj193542.aspx

このようにすると Posts テーブルに BlodId という int 型、NULL 不可のフィールドが生成され、Blogs テーブルの BlogId フィールドと外部制約が設定されるようになります。

ちばみに、Post クラスの BlogId プロパティ、Blog ナビゲーションプロパティは外部制約を設定するには必須ではないですが、連鎖削除ができないなどの問題があります。なので、チュートリアル通りにするのがお勧めおようです。

どう違うかに興味があれば以下の記事を見てください。

Code First で外部キープロパティの定義
http://surferonwww.info/BlogEngine/post/2016/09/11/defining-foreign-key-property-in-entity-framework-code-first.aspx

【追伸】

もし、ASP.NET MVC 全体的な話の中での EF Code First のことを学びたいということなら、以下の記事の「第2回 Entity Frameworkコード・ファーストでモデル開発」の方が参考になるかもしれません。(上の回答で紹介した記事「新しいデータベースの Code First」は、EF Code First の話のみで ASP.NET MVC でどう利用できるかは何も書かれてません)

IT 連載:ASP.NET MVC入門【バージョン3対応】
http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/index/index.html

記事は MVC3, EF4.1 とちょっと古く、使用している DB も SQL Server Compact ですが、MVC5, EF6, SQL Server Express (または LocalDB) でも問題なく EF Code First で DB を生成して、それを ASP.NET MVC から利用するアプリを作ることができます。(自分の環境で検証済みです)

この記事の通りに作ると Books, Reviews テーブルが生成されます。Reviews テーブルには Books_Isbn フィールドが生成され、それに Books テーブルの主キー Isbn への外部キー制約が設定されます。

投稿2018/08/03 03:36

編集2018/08/05 01:55
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/08/06 01:02 編集

リンクまでご用意頂きありがとうございます! そちらの内容を参考にしてみます。 追伸 ご返事遅くなってしまい申し訳ありません、 たくさんの情報ありがとうございます! これで勉強も捗ります。 ありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問