0

MVCを使用してasp.net Webプロジェクトを作成し、EntityFramework 6.0のコードファーストアプローチを使用してlocalhostでうまく動作します。Code-First EntityFrameworkでWebHostingにASP WebProjectをアップロードする - CREATE DATABASE 'master'

今週私は新しいウェブホスティングを購入して自分のウェブサイトをアップロードしました。

問題は、私がウェブサイトを実行するたびにデータベース「マスター」にデータベースを作成しようとすると、なぜこれが起こるのでしょうか?

Web ConnectionがConnectionStringで提供している適切なデータベースを選択しています。

メモがあります:私はASP Identity OWINも使用しています...多分それは問題ですか?別のConnectionStringを使用していますか?

私のアイデンティティコンフィグ(OWINに使用):

namespace MyNamespace 
{ 
    public class IdentityConfig 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.CreatePerOwinContext(() => new MyContext()); 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/Home/Login"), 
      }); 
      FormsAuthentication.SetAuthCookie("CookieValue", false); 

     } 
    } 
} 

そしてここでは、私のDbContextはあるMyContextと呼ばれている。ここで

namespace MyNamespace.DAL 
{ 
    public class MyContext : IdentityDbContext<IdentityUser> 
    { 
     public MyContext() : base("MyNamespace.DAL.MyContext") 
     { 
      if (!Roles.Any(r => r.Name == "admin")) 
      { 
       var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(this)); 
       RoleManager.Create(new IdentityRole("admin")); 
      }     


      if (!Users.Any(u => u.UserName == "myuser")) 
      { 
       var store = new UserStore<IdentityUser>(this); 
       var manager = new UserManager<IdentityUser>(store); 

       var user = new IdentityUser { UserName = "myuser" }; 

       manager.Create(user, "mypw123"); 
       manager.AddToRole(user.Id, "admin"); 
      } 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     } 

     public DbSet<Item1> stuff1 { get; set; } 
     public DbSet<Item2> stuff2 { get; set; } 
     public DbSet<Item3> stuff3 { get; set; } 
     public DbSet<Item4> stuff4 { get; set; } 
     public DbSet<Item5> stuff5 { get; set; } 
    } 
} 

は私のWeb.Configである:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections></configSections> 

    <appSettings> 
    <add key="owin:AppStartup" value="MyNamespace.IdentityConfig" /> 
    </appSettings> 

    <connectionStrings> 
    <add name="MyNamespace.DAL.MyContext" providerName="System.Data.SqlClient" connectionString="server=myhostingmssql07; uid=myuserid_en_wmx00; database=mydbname_en_wmx00; password=mybdpw;" /> 
    </connectionStrings> 

    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <customErrors mode="Off"/> 
    <trust level="Full" /> 
    </system.web> 

    <!--More stuff here..--> 

</configuration> 

PS:私は、デフォルトの管理者を作成するために使用される、このメカニズムが最善のアプローチではないことを知っているが、私はちょうど今、この権利の作業を配置する必要があり、後でシード方法に変更します、そして、私が処理しますすべてのリファクタリング。次の行にあるエラー原因ログメッセージ(あなたが上記を参照できるように私はのcustomErrorsを使用していますが=オフ):


はPS2

if (!Roles.Any(r => r.Name == "admin")) 

この行は、上にデータベースを作成するトリガーデータベース 'master'は、ConnectionStringで指定されたものではありません!

あなたはのConnectionStringで上記を参照できるように、それは...

を「mydbname_en_wmx00」と呼ばれるデータベース上のすべてのDbContextとIdentityDbContextテーブルを作成する必要があり、私は、パラメータ値と同じのConnectionStringを使用してweb.configにEntityFrameworkのデフォルトのファクトリを使用してみました私はInitializ次を使用している場合ことを知っている:PS3


...と私は(内部サーバーエラー500)を取得し始めたので、私はちょうどロールバックされ、このEntityFrameworkデフォルトの工場出荷時の設定を削除しましたあるMyContextコンストラクタの
ER:それはすべてのデータベースにCREATEとすべてが大丈夫になりトリガされません

Database.SetInitializer<MyContext>(null); 

、問題は、私はなどなど、AspNetRolesとAspNetUsersのように、データベースに手動ですべてのものを設定する必要があるということで、私のすべてのDbContextテーブル(Stuff1、stuff2など)


PS4:はたぶん、あなたはthis linkを考えているが、重複する質問ですが、それはないですが、彼は地元のSQLEXPRESSのインスタンスを使用している、と私は私の支払ったホストからリモートMSSQLを使用しています...


ありがとうございます、何が起こっているのか分かりますか? EFコード - 最初の自動生成データベースは有料のWebホスティングでは機能しませんか?

答えて

0

それは常に参照するためのコード、最初のアプローチのためのサポートは、(それが更新移行し、パッケージマネージャコンソールからの種子のメソッドを実行している含まれて)ありません

...それが私の支払ったWebホスティングからの問題だと思われますあなたが知っているように私が許可を持っていない「マスター」データベース。

回避策を考え出したので、コンテキストとモデルから完全なSQLスクリプトを生成して、SQLスクリプト自分のシステムのツールを使用してリモートデータベースサーバに保存し、すべてのテーブルは各モデル仕様に従って作成されます。あなたは有効-移行ができない場合のConnectionStringであなたのリモートホストがそれを許可していないため -

は、私が前に 有効-移行を入力してください(パッケージマネージャコンソール上 following commandを実行するSQLスクリプトを生成するには、ちょうどあなたの地元のデシベルを指して新しいのConnectionStringを作成し、再度実行して、「 有効-移行-Forceは、」それは動作しますが、それは)私のためにやった:

Update-Database -Script -SourceMigration:0 

は、その後、あなたのEFを言うことを忘れてはいけませんnullのDatabaseInitializerを使用しているため、コードファーストの手法を使用して新しいデータベースを削除または作成しようとしません。

Database.SetInitializer<YourContext>(null); 

StackOverFlowのおかげで、このソリューションが見つかりました。私たちは現在、幸いです!

関連する問題