2011-09-10 3 views
2

J'utilise MVC3 avec la première approche du code. Dans ce cas, j'ai dû générer mes classes d'entités à partir de la base de données existante.Problème de connexion à la base de données avec MVC3

La base de données a été

Database1.mdf

Une fois que je l'ai fait, il a créé DBEntities et a ajouté une nouvelle connectionstring dans mon web.config qui ressemblait à ceci:

<add name="DATABASE1Entities" connectionString="metadata=res://*/Models.Task.csdl|res://*/Models.Task.ssdl|res://*/Models.Task.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\DATABASE1.MDF;integrated security=True;user instance=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

maintenant J'ai supprimé les entités DB et créé ma propre classe DB Context.

et

Maintenant, je travaille avec le connectionstring suivant:

<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DATABASE1.mdf;User Instance=true" providerName="System.Data.SqlClient" /> 

Nom de ma classe DBcontext est TaskContext.

Je ne suis pas sûr de ce qui se passera après cela. Mon code fonctionne. Mais cela fonctionne sur une base de données vierge et ne reflète aucune donnée dans database.mdf. Si j'ajoute quelque chose en utilisant mon contrôleur, je vois que cette chose est ajoutée. Mais cela ne se reflète pas dans Databse1.mdf.

Il semble avoir créé sa propre base de données. Mais je ne vois pas le fichier andy .sdf ou .mdf créé n'importe où ... Je ne suis pas sûr de ce qui se passe?

+0

Salut, je viens de remarquer que le fichier a EDMX quelque chose comme database1model.store. Je soupçonne, si cela a quelque chose à voir avec mon problème? – TeaLeave

+0

Donc, vous avez mentionné que votre code fonctionne. Voulez-vous dire que si vous ajoutez quelque chose via votre application, il est ajouté à la base de données et vous pouvez récupérer plus tard cette information de la base de données? – itsmatt

Répondre

2

Faites le nom de votre chaîne de connexion identique à TaskContext:

<add name="TaskContext" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DATABASE1.mdf;User Instance=true" 
    providerName="System.Data.SqlClient" /> 

OU, vous pouvez utiliser votre connectionStringName favori en suivant ces étapes:

1- Lorsque vous êtes créer un objet TaskContext, change connexionChaîne:

var cn = WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString; 
// or 
var cn = WebConfigurationManager.ConnectionStrings[0].ConnectionString; // use your connection index instead of 0 
var _context = new TaskContext(); 
_context.Database.Connection.ConnectionString = cn; 

2- dans votre contexte classe (TaskContext), vous devez dire à Modelbuilder à supprimer IncludeMetadataConvention par ce code:

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

Essayez d'attribuer le même nom à votre chaîne de connexion et à DBContext. Je crois lire à un moment donné que EF Code First utilise beaucoup de conventions, donc s'il ne trouve pas de chaîne de connexion nommée DB Context (dans votre cas "TaskContext"), il essayera de se connecter à un SQLExpress (que ce soit ou non il y en a un installé) et essaiera de trouver ou de créer la base de données. Je suppose que vous avez installé SQLExpress. Qu'y a-t-il dans C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\? (Je pense que c'est le chemin) Avez-vous un DB assis là pour ce projet? Peut-être quelque chose comme [YourNamespace] .TaskContext.dbf?

+0

Vous avez raison, il a mystérieusement ajouté ce fichier .MDf à l'emplacement que vous avez mentionné. J'ai dû recréer le projet. maintenant ça marche. – TeaLeave

Questions connexes