J'utilise MVC pour la première fois et j'essaie d'utiliser un initialiseur pour initialiser les données dans ma base de données lors du premier démarrage de l'application. Voici ce que j'ai dans Global.asax.cs:
System.Data.Entity.Database.SetInitializer(new MyAppInitializer());
MyAppContext db = new MyAppContext();
db.Database.Initialize(true);
Dans Web.config, voici ma chaîne de connexion:
<connectionStrings>
<add name="MyAppContext"
connectionString="data source= MyServer; Integrated Security=True; database=MyDatabase"
providerName="System.Data.SqlClient"/>
Ceci utilise MS SQL 2008 R2. Mon initialiseur ressemble à ceci:
public class MyAppInitializer : DropCreateDatabaseAlways<MyAppContext>
{
protected override void Seed(MyAppContext context)
{
var organizations = new List<Organizations>
{
new Organizations { OrgName = "AT", OrgPhone = 5093333433, OrgOfficeLocation = "ITB", OrgPointOfContact = "Tony", OrgIsActive = 1 },
new Organizations { OrgName = "Libraries", OrgPhone = 5093331122, OrgOfficeLocation = "Holland-Terrell", OrgPointOfContact = "Herald", OrgIsActive = 1 }
};
organizations.ForEach(s => context.Organizations.Add(s));
context.SaveChanges();
Je me suis assuré de bien fermer ma connexion au serveur et à la base de données dans SQL Server Management Studio, mais plusieurs personnes ont accès à cette base de données, bien qu'aucune ne l'utilise pour le moment. Comment puis-je l'obtenir afin d'initialiser ces données dans ma base de données? Merci!
Edit: j'ai déjà créé la base de données sur le serveur, mais elle est complètement vide (pas de tables, procédures, etc.). Cela causerait-il un problème?
Dans SSMS, lancez quelque chose comme ça ...
USE master -- be sure that you're not on MYDB
ALTER DATABASE MYDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE MYDB;
J'ai rencontré un problème similaire aujourd'hui lorsque j'utilise MVC codefirst. Après 20 minutes d’essai, j’ai remarqué que l’onglet "Explorateur de serveurs" de Visual Studio permettait la connexion à ma base de données. Après avoir "fermé" la connexion dans l'onglet Explorateur de serveurs de Visual Studio, le code a pu être exécuté et recréé automatiquement la base de données.
Comme décrit par Vardhini ... fermez la connexion à la base de données dans l’Explorateur de serveurs.
Dans la fenêtre "Supprimer" de SSMS, assurez-vous que "Fermer les connexions existantes" est coché.
Mes observations sont:
Ensuite, la base de données de reconstruction d’application même lorsque Database.SetInitializer<DbContext>(new DbInitializer());
est dans public DbContext();
- PAS comme les autres répondeurs la mettent dans Application_Start();
La fermeture de toutes les connexions existantes de la base de données dans Visual Studio Server Explorer et SQL Management Studio a résolu le problème.