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ホスティングでは機能しませんか?