Donc, je construis mon projet web asp.net en utilisant MVC et ça fonctionne très bien dans localhost en utilisant l'approche code-en-tête d'EntityFramework 6.0.Télécharger ASP WebProject sur WebHosting avec Code-First EntityFramework - CREATE DATABASE 'master'
Cette semaine, j'ai acheté un nouvel hébergement Web pour télécharger mon site Web.
Le problème est que, chaque fois que je lance le site Web, il essaie de créer une base de données dans la base de données «maître», pourquoi cela se passe-t-il?
Je sélectionne la bonne base de données que mon Web Hosting a fourni sur ma ConnectionString.
Il y a une note: J'utilise aussi ASP Identity OWIN ... c'est peut-être le problème? il utilise un autre ConnectionString?
Mon identité Config (Utilisé pour 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);
}
}
}
Et voici mon DbContext appelé 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; }
}
}
Voici mon 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: Je sais que ce mécanisme j'ai utilisé pour créer des admins par défaut ne sont pas la meilleure approche, je vais changer à une méthode de semences plus tard, j'ai juste besoin de mettre ce travail en ce moment, alors je vais gérer tout le refactoring.
PS2: Le message du journal provoque l'erreur (j'utilise customErrors = Off comme vous pouvez le voir ci-dessus) est sur la ligne suivante:
if (!Roles.Any(r => r.Name == "admin"))
Cette ligne déclenche une créer base de données base de données 'master', ce n'est pas ce qui est spécifié sur ConnectionString !!
Il faut créer toutes les tables DbContext et IdentityDbContext sur la base de données appelée « mydbname_en_wmx00 » comme vous pouvez le voir ci-dessus dans ConnectionString ..
J'ai essayé d'utiliser Factory Default EntityFramework sur web.config en utilisant comme valeur de paramètre de la même ConnectionString et j'ai commencé à (Internal Server Error 500), donc je viens de rouler en arrière et a supprimé cette EntityFramework configuration d'usine par défaut ...
PS3: Je sais que si j'utilise la suivante Initializ er sur MyContext constructeur:
Database.SetInitializer<MyContext>(null);
ne déclenche pas de base de données et créer sur tout va bien, le problème est que je dois tout mettre en place manuellement sur la base de données, comme AspNetRoles et AspNetUsers, etc etc, et toutes mes tables DbContext (Stuff1, stuff2, etc).
PS4: Peut-être que vous pensent this link est une double question, mais ce n'est pas, il utilise par exemple SQLEXPRESS local, et je me sers d'un MSSQL éloigné de mon hôte payé ...
Merci beaucoup pour votre effort, savez-vous par hasard, que se passe-t-il ici? Les bases de données auto-générées EF Code-First ne fonctionnent pas sur les Web-Hostings payants?