2009-09-10 11 views
58

J'ai une application asp.net-mvc avec la base de données d'appartenance par défaut. J'y accède par ADO.NET Entity Framework.source de données non prise en charge par mot clé

Maintenant je veux le déplacer vers IIS, mais plusieurs problèmes sont apparus. J'ai dû installer SQL Server Management Studio, créer une nouvelle base de données, importer toutes les données du fichier .MDF précédent. La seule chose à faire (pour autant que je sache) est de passer à la chaîne de connexion. Cependant, je ne suis pas vraiment expérimenté avec cela et continue à obtenir le mot-clé non pris en charge: «source de données». exception. Voici ma chaîne de connexion:

<add name="ASPNETDBEntities" 
    connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
    providerName="System.Data.EntityClient" /> 

Toutes les idées, qu'est-ce qui ne va pas?

Répondre

110

Ce que vous avez est une chaîne de connexion ADO.NET valide - mais c'est PAS une chaîne de connexion Entity Framework valide.

La chaîne de connexion EF ressemblerait à quelque chose comme ceci:

<connectionStrings> 
    <add name="NorthwindEntities" connectionString= 
    "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl; 
     provider=System.Data.SqlClient; 
     provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 

Vous êtes absent tous les metadata= et providerName= éléments dans votre chaîne de connexion EF ...... vous essentiellement avez seulement ce que est contenu dans la provider connection string partie. L'utilisation du concepteur EDMX doit créer une chaîne de connexion EF valide pour vous, dans votre fichier web.config ou app.config.

Marc

MISE À JOUR: OK, je comprends ce que vous essayez de faire: vous avez besoin d'une deuxième chaîne de connexion « ADO.NET » juste pour l'utilisateur ASP.NET/base de données des membres. Votre chaîne est OK, mais providerName est faux - il devrait être "System.Data.SqlClient" - cette connexion n'utilise pas ENtity Framework - ne spécifiez pas "EntityClient" pour cela!

<add name="ASPNETMembership" 
    connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
    providerName="System.Data.SqlClient" /> 

Si vous spécifiez providerName=System.Data.EntityClient ==>chaîne de connexion Entity Framework (avec les métadonnées = et tout).

Si vous avez besoin et spécifier providerName=System.Data.SqlClient ==>ADO.NET droite chaîne de connexion SQL Server sans tous les ajouts EF

+0

En fait, c'est le cas, mais alors je reçois l'exception Impossible d'ouvrir le fichier physique "C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf". Erreur du système d'exploitation 5: "5 (n'a pas réussi à récupérer le texte pour cette erreur Raison: 15105)". Une tentative de connexion d'une base de données nommée automatiquement pour le fichier C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf a échoué.Une base de données portant le même nom existe ou le fichier spécifié ne peut pas être ouvert ou se trouve sur le partage UNC. De certaines sources, j'ai pensé, c'est faux .. Merci quand même. – Trimack

+0

Je ne suis pas sûr de comprendre le problème de la deuxième chaîne de connexion. Je devrais laisser là celui créé par le concepteur et ajouter l'ASPNETMembership que vous m'avez écrit? – Trimack

+0

Si vous avez vos entités dans le concepteur EDMX - celles-ci doivent être accessibles au moyen d'un "EntityClient" et une chaîne de connexion EF. Si vous utilisez le système d'appartenance ASP.NET "prêt à l'emploi", il ne fait PAS partie de votre modèle EF. Par conséquent, lorsque vous créez une chaîne de connexion pour votre base de données d'appartenance ASP.NET, vous ne pouvez pas utiliser " EntityClient "en tant que fournisseur - utilisez SqlClient. –

4

Ce problème peut se produire lorsque vous faites référence à votre connexion web.config (ou app.config) chaînes par index ...

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString; 

la chaîne de connexion à base de zéro ne sont pas toujours celui de votre fichier de configuration comme inherits others by default from further up the stack.

Les approches recommandées sont pour accéder à votre connexion par nom ...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; 

ou pour effacer l'élément connnectionStrings dans votre fichier de configuration d'abord ...

<connectionStrings> 
    <clear/> 
    <add name="MyConnection" connectionString="... 
0

J'ai eu ce problème quand J'ai commencé à utiliser Entity Framework, c'est arrivé quand je n'ai pas changé l'ancienne connexion du serveur SQL à la connexion EntityFrameWork.

Solution: dans le fichier où la connexion se fait par fichier web.config « add name = » entités « connectionString = XYZ », assurez-vous que vous faites référence à la connexion correcte, dans mon cas, je devais faire

 public static string MyEntityFrameworkConnection 
    { 
     get 
     { 
      return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString; 
     } 

    } 

appel MyEntityFrameworkConnection chaque fois besoin d'établir une connexion.

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection; 

note: la connexion dans le fichier web.config sera générée automatiquement lors de l'ajout du modèle Entity à la solution.

2

Je recevais le même problème.
mais ce code fonctionne bien l'essayer.

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 
0

Je sais que c'est un ancien poste mais je suis la même erreur récemment, donc pour ce que ça vaut la peine, voici une autre solution:

Cela est généralement une erreur de chaîne de connexion, s'il vous plaît vérifier le format de votre chaîne de connexion, vous pouvez rechercher 'entity framework connectionstring' ou suivre les suggestions ci-dessus.

Cependant, dans mon cas ma chaîne de connexion était très bien et l'erreur a été causée par quelque chose de complètement différent et j'espère que cela aide quelqu'un:

  1. D'abord j'ai eu une erreur EDMX: il y avait un nouvelle table de base de données dans l'EDMX et la table n'existait pas dans ma base de données (chose amusante est l'erreur l'erreur n'était pas très évidente car elle n'était pas montrée dans ma fenêtre EDMX ou de sortie, elle était cachée dans le studio visuel Fenêtre "Liste d'erreurs" sous les "Avertissements"). J'ai résolu cette erreur en ajoutant la table manquante à ma base de données. Mais, j'étais en fait occupé à essayer d'ajouter une procédure stockée et d'obtenir toujours l'erreur « DataSource » alors voir ci-dessous comment je l'a résolu:

  2. erreur de procédure stockée: Je tentais d'ajouter une procédure stockée et chaque fois que je Je l'ai ajouté via la fenêtre de conception EDMX J'ai une erreur 'datasource'. La solution consistait à ajouter la procédure stockée comme vide (j'ai gardé le nom et la déclaration du proc stocké mais j'ai supprimé le contenu du proc stocké et l'ai remplacé par 'select 1' et j'ai réessayé de l'ajouter à l'EDMX). Ça a marché! Vraisemblablement EF n'aimait pas quelque chose dans mon proc stocké. Une fois que j'avais ajouté le proc à EF, j'étais alors capable de mettre à jour le contenu de la proc sur ma base de données à ce que je voulais qu'il soit et cela fonctionne, l'erreur 'datasource' a été résolue.

bizarreries

0

Je recevais la même erreur, puis mis à jour ma chaîne de connexion comme ci-dessous,

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 

Essayez cela, il va résoudre votre problème.

Questions connexes