C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

コードファーストでDBが作成されない

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■93575 / inTopicNo.1)  コードファーストでDBが作成されない
  
□投稿者/ QQ (1回)-(2019/12/23(Mon) 18:02:55)

分類:[ASP.NET (C#)] 

お世話になります。

VS2017にてASP.NET MVC+EntityFramework6のプロジェクトを作成しようとしているのですが、
コードファーストにてSQLServerにDBを作成しようと、モデルを作成しビルドをしているのですが、
DBが作成されない状態です。
特にビルドエラーも出ておりません。

どのような原因が考えられますでしょうか?
以下の3点では記述が足りないのでしょうか?


■モデル
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
}

■DBコンテキスト
public class TestContext: DbContext
{
public DbSet<User> Users { get; set; }
}

■Web.config
<connectionStrings>
<add name="TestContext"
connectionString="Data Source=localhost\SQLEXPRESS;
Initial Catalog=TestDb;
Persist Security Info=True;
User ID=sa;
Password=;
MultipleActiveResultSets=True;
Application Name=EntityFramework"
providerName="System.Data.SqlClient" />
</connectionStrings>


引用返信 編集キー/
■93576 / inTopicNo.2)  Re[1]: コードファーストでDBが作成されない
□投稿者/ WebSurfer (1999回)-(2019/12/23(Mon) 18:22:39)
No93575 (QQ さん) に返信

> どのような原因が考えられますでしょうか?
> 以下の3点では記述が足りないのでしょうか?

接続文字列が間違っているのですが、それが原因なのか断定できるの情報が
ないです。

一度以下のチュートリアルに従ってコンソールアプリで DB を作ってみてく
ださい。SQL Server Express がインストールしてあれば、Code First の既
定に従って DB が生成されるはずです。

新しいデータベースへの Code First
https://docs.microsoft.com/ja-jp/ef/ef6/modeling/code-first/workflows/new-database
引用返信 編集キー/
■93577 / inTopicNo.3)  Re[2]: コードファーストでDBが作成されない
□投稿者/ QQ (2回)-(2019/12/23(Mon) 18:46:06)
2019/12/23(Mon) 19:08:44 編集(投稿者)

No93576 (WebSurfer さん) に返信
> 一度以下のチュートリアルに従ってコンソールアプリで DB を作ってみてく
> ださい。SQL Server Express がインストールしてあれば、Code First の既
> 定に従って DB が生成されるはずです。

やってみました。
SQLServerオブジェクトエクスプローラーの中のlocaldbの中にDBが作成されました。
となると接続情報の書き方の問題なのでしょうか?

一応、コードファーストではない別プロジェクトで接続できている記述内容でしたので
間違いがピンと来ない状況です。。

ちなみに、SQL Server 2012 Expressがインストール済みです。
引用返信 編集キー/
■93580 / inTopicNo.4)  Re[3]: コードファーストでDBが作成されない
□投稿者/ WebSurfer (2000回)-(2019/12/23(Mon) 19:55:01)
No93577 (QQ さん) に返信

> となると接続情報の書き方の問題なのでしょうか?

それだけが問題なのか分かりませんが、とにかく接続文字列が間違ってます。
そこをまず勉強した考えてみることをお勧めします。

接続文字列の書き方に自信ができたら、以下の記事を参考にコンテキストクラ
スの定義に接続文字列を指定して、指定した通りの場所に DB が生成されるか
調べてみてください。

接続文字列とモデル
https://docs.microsoft.com/ja-jp/ef/ef6/fundamentals/configuring/connection-strings
引用返信 編集キー/
■93585 / inTopicNo.5)  Re[3]: コードファーストでDBが作成されない
□投稿者/ WebSurfer (2002回)-(2019/12/24(Tue) 09:35:27)
No93577 (QQ さん) に返信

No93580 で紹介した「接続文字列とモデル」の記事の内容がある程度理解できたら
以下のチュートリアルを一通りやってみつことをお勧めします。(機械翻訳なので
日本語に難ありですが)

最初のチュートリアルで EF Code First による DB の生成の話が出てきます。

MVC 5 を使用する Entity Framework 6 Code First の概要
https://docs.microsoft.com/ja-jp/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/
引用返信 編集キー/
■93590 / inTopicNo.6)  Re[4]: コードファーストでDBが作成されない
□投稿者/ QQ (3回)-(2019/12/24(Tue) 12:00:39)
No93585 (WebSurfer さん) に返信

まず、接続文字列については、投稿の際に余計な「"」が追加されてしまってました。
こちらは実際にはありません。

> MVC 5 を使用する Entity Framework 6 Code First の概要
> https://docs.microsoft.com/ja-jp/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/

そして、教えて頂いた記事や、上記チュートリアルをやってみました。
どうやら勘違い(?)をしていたようで、モデル+DBコンテキスト+接続情報
の3つを作成してビルドすればDBが作られるものと思っていたのですが、
モデルをベースとしたコントローラー+ビューを作成してブラウザ表示したところDBが作成されました。

モデルが使用される機能を初めて実行した際にDBが作成されるという理解であっているのでしょうか?
(大抵の記事がCRUDありのビューまで作ってからの実行のようで、具体的なタイミングが分かりませんでした。)



引用返信 編集キー/
■93591 / inTopicNo.7)  Re[5]: コードファーストでDBが作成されない
□投稿者/ WebSurfer (2003回)-(2019/12/24(Tue) 14:06:18)
No93590 (QQ さん) に返信

> まず、接続文字列については、投稿の際に余計な「"」が追加されてしまってました。
> こちらは実際にはありません。

接続文字列ですが、まず localhost は (local) とするのが Microsoft の推奨です。

Windows 認証を使っていると理解していますが、その場合 SQL Server 認証で使う User ID,
Password は不要です。

Application Name というのも不要だと思います。

接続できたそうですので間違いとは言えないかもしれませんが、Microsoft のドキュメント
に従って書いた方がよさそうです。

> どうやら勘違い(?)をしていたようで、モデル+DBコンテキスト+接続情報
> の3つを作成してビルドすればDBが作られるものと思っていたのですが、
> モデルをベースとしたコントローラー+ビューを作成してブラウザ表示したところDBが作成されました。

接続文字列は指定してなければ EF Code First の規約にしたがって EF が生成しますが、
コンテキストクラスは必須です。

ただし、接続文字列をEF 任せにするのは問題あるはずで(特に運用環境に移す際)、
普通は web.config に書いてコン
テキストクラスのコンストラクタに指定しそれが使われるようにします。

> モデルが使用される機能を初めて実行した際にDBが作成されるという理解であっているのでしょうか?

その理解で良いと思います。一番最初に紹介した記事でもそれが分かると思います。
引用返信 編集キー/
■93598 / inTopicNo.8)  Re[5]: コードファーストでDBが作成されない
□投稿者/ WebSurfer (2004回)-(2019/12/25(Wed) 10:06:26)
No93590 (QQ さん) に返信

SQL Server の接続文字列に関する Microsoft のドキュメントを紹介しておきます。
日本語版もありますが機械翻訳で内容がメチャクチャなので英語版を読んでください。

SqlConnection.ConnectionString Property
https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlconnection.connectionstring?redirectedfrom=MSDN&view=netframework-4.8#System_Data_SqlClient_SqlConnection_ConnectionString


引用返信 編集キー/
■93601 / inTopicNo.9)  Re[6]: コードファーストでDBが作成されない
□投稿者/ QQ (4回)-(2019/12/25(Wed) 10:57:06)
2019/12/25(Wed) 11:03:27 編集(投稿者)

No93598 (WebSurfer さん) に返信

返信が遅くなりました。
ドキュメント、日本語、英語を合わせて読んでみました。

最終的に以下のようにしました。(SQL認証でした。)
<connectionStrings>
<add name="TestContext"
connectionString="Data Source=(local)\SQLEXPRESS;
Initial Catalog=TestDb;
User ID=sa;
Password=;"
providerName="System.Data.SqlClient" />
</connectionStrings>

勉強になりました!
ありがとうございました!
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ