2017-07-13 12 views
0

ユーザーがログインして特定のアクションを実行できるようにするWebアプリケーションを作成しています。私はこれをたどったtutorial(簡単にするために、私が使った正確なデータベース設定については、「メンバーシップデータを保存するデータベースを生成する」を検索できます)。ASP.NET MVC - 'no such table':AspNetUsers

すべてが開発に正常に動作しますが、私はそれを展開し、新しいユーザーを登録しようとすると、それは私にエラーを与える:私は「DOTNET EFデータベースの更新」を実行する必要があるため

An unhandled exception has occurred: SQLite Error 1: 'no such table: AspNetUsers'.

はこれです展開では?もしそうなら、私はそれを避けることができると思いますが、データベースをセットアップして準備しておくだけです。このチュートリアルでは、 'dbContext.Database.Migrate();'を呼び出すことで半ば話しましたが、Configure()メソッドにはdbContextがありません...そのため、ギャップを埋める方法がわかりません。

投稿したいコードに関する情報がある場合は、投稿していただきます。前もって感謝します!

+0

移行の生成と適用は、アプリケーションの機能ではありません。リリースの一部(ReadyRollなど)を使用する必要があります。あるいは、デプロイメント・プロシージャの一部としてスキーマ更新を手動で適用する必要があります。 –

+0

@ChrisPrattレスポンスありがとう!それは厄介です、私はアプリケーションの中から簡単な解決策を望んでいました。私が望むものを得るためにドットネットコマンドを実行するスクリプト(チュートリアルのもののようなもの)をアプリケーションから呼び出すと、うまくいくでしょうか?このWebアプリケーションは、私たちの顧客の皆様に提供されます(プログラミングの経験はほとんどありません)ので、私はそれらにWebアプリケーションを渡すことができます。何かを設定する。 –

+1

パッケージとして配布する場合は、「インストーラ」が必要です。それは完全に吹き飛ばされたGUIインストーラと同じくらい複雑なものでも、powershellスクリプトのような単純なものでもかまいません。エンドユーザーが自分でデータベースを作成/変更できる能力があると判断した場合、またはエンドユーザーがスクリプトを作成することができるとみなします。 –

答えて

0

私は問題の解決方法を見つけ出しましたが、解決策の詳細については私と一緒に裸にしてください。 ステップ1が絶対に必要であることを覚えておくことができるほど長くなっていますが、私たちもやる必要があるならば、私はかなりぼんやりしていますステップ2。私は時間があるときにいくつかの点を指摘し、私は確認するためにこれを再訪するが、今は、これがあなたに問題を克服するのに十分な助けを与えることを望む。

ステップ1:次のコードでIdentityDbContext<IdentityUser>から継承するカスタムコンテキストクラスであなたのAspNetUsersテーブルを作成します。私の例では、このクラスをCustomDbContextと呼んでいます。

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<IdentityUser>().ToTable("AspNetUsers"); 
    base.OnModelCreating(modelBuilder); 
} 

注:あなたがガイド以下または認証のためにこれを使用していない場合は、単にDbContextからカスタムコンテキストクラスの継承を持っていると思います。

ステップ2:あなたのStartup.cs、あなたは文字通りCustomDbContextデータベース(AspNetUsersが)で作成され、利用可能であることを確実にしているスタートアップ()メソッドに次のコードを配置する必要があります製造。

using (var client = new CustomDbContext()) 
{ 
    client.Database.EnsureCreated(); 
} 

注:あなたは(私に知らせるためにトーマスSchneiterにクレジット)の代わりにthisに応じてそのusingステートメントでclient.Database.Migrate()を行うことができ憶測があるが、私は個人的にそれが動作するかどうかを確認するためにそれを試していません。この特定のコードに関連して別のSO postがあり、私が投稿した回答があります。

+0

あなたのソリューションを共有してくれてありがとう。私の場合、それは別の理由でした。私はstartup.cs内で呼び出されていたシードデータ初期化子を持っていました。だから私は、移行を更新しようとすると何らかの理由でイニシャライザを実行し、テーブルを見つけることができません。初めてマイグレーションを実行する前に、イニシャライザにコメントしておきました。 – Campinho

関連する問題