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

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

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

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

Q&A

解決済

1回答

676閲覧

Entity Frameworkを使用していてSeedメソッドが実行されません

kikiinu

総合スコア21

Entity Framework

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

0グッド

0クリップ

投稿2017/12/02 04:05

@ITのサイトの連載:Entity Framework 4.1入門
第2回 EF 4.1の規約とデータベースの初期化方法
を参考にSeedメソッドで初期化したいのですが
ブレークポイントを設定してもそこで止まらずに
処理が進んでしています。
わかる方がいれば教えていただけますか?

VS2017
NETFramework,Version=v4.6.1
EntityFramework,version="6.2.0"

form1.cs public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // 常にデータベースを再生成する Database.SetInitializer(new TestDbInitializer()); } }
TestDbContext.cs public class TestDbInitializer : DropCreateDatabaseAlways<TestDbContext> { public TestDbInitializer() { } protected override void Seed(TestDbContext context) { Debug.WriteLine("test"); // 基底クラスのSeedメソッド呼び出し base.Seed(context); new List<ClientStatus> { new ClientStatus() { Status = ClientStatusNames.Test1, }, new ClientStatus() { Status = ClientStatusNames.Test2, }, }.ForEach(u => context.ClientStatuses.Add(u)); //context.Prefectures.AddOrUpdate(p => p.Code, entity); // ↑ListのForEachメソッドとラムダ式でエンティティを一括追加 // 変更をデータベースに反映 context.SaveChanges(); } } public class TestDbContext : DbContext { public DbSet<ClientStatus> ClientStatuses { get; set; } }
ClientStatus.cs public enum ClientStatusNames { Test1, Test2, } public class ClientStatus { public int Id { get; set; } public ClientStatusNames Status { get; set; } }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/12/02 07:22

C# のタグをつけてください。
guest

回答1

0

ベストアンサー

@ITのサイトの連載:Entity Framework 4.1入門第2回 EF 4.1の規約とデータベースの初期化方法を参考に

その url を書いてください。

Seedメソッドで初期化したいのですが ブレークポイントを設定してもそこで止まらずに処理が進んでしています。

EF Code First の機能を利用して DB(.mdf ファイル) を生成したいが、できないと言ってますか?

Visual Studio 2017 をインストールすると LocalDB もインストールされ、開発環境ではそれを使うのが一般的ですが、そこは問題ないということであれば、TestDbContext を初期化してそれ使うコードを書かないと DB は生成されないと思います。

例えば、@IT の以下の記事の通りに作った場合、

第2回 Entity Frameworkコード・ファーストでモデル開発
http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_03/aspnetmvc3_03_01.html

その記事の Global.asax の Application_Start(ASP.NET アプリでは初回にそれが必ず呼び出されます) に設定した Database.SetInitializer<MyMvcContext>(new MyMvcInitializer()); だけでは Books, Reviews テーブルも初期データも生成されません。

それと同じ状況ではないかと思われます。

上記の記事の最後のページにあるように、Controller を作って MyMvcContext を初期化するコードを書き、Controller を呼び出さないとダメです。

投稿2017/12/02 07:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kikiinu

2017/12/04 12:08

WinFormのアプリなのですが設定ファイルapp.configに記述したらSeedメソッドが実行されたました。 ありがとうござました。
退会済みユーザー

退会済みユーザー

2017/12/04 15:12

app.config に何をどのように設定したのか教えていただけませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問