2010-08-30 4 views
15

Ok, ceci n'est peut-être pas associé à EF. Je suis en train d'utiliser le code-première caractéristique et qui suit est ce que je l'ai écrit: -Entity Framework - Chaîne non-vide attendue pour le paramètre 'providerInvariantName'

var modelBuilder = new ModelBuilder(); 
      var model = modelBuilder.CreateModel(); 
      using (AddressBook context = new AddressBook(model)) 
      { 
       var contact = new Contact 
       { 
        ContactID = 10000, 
        FirstName = "Brian", 
        LastName = "Lara", 
        ModifiedDate = DateTime.Now, 
        AddDate = DateTime.Now, 
        Title = "Mr." 

       }; 
       context.contacts.Add(contact); 
       int result = context.SaveChanges(); 
       Console.WriteLine("Result :- "+ result.ToString()); 

      } 

La classe de contexte: -

public class AddressBook : DbContext 
    { 
     public AddressBook() 
     { } 
     public AddressBook(DbModel AddressBook) 
      : base(AddressBook) 
     { 

     } 
     public DbSet<Contact> contacts { get; set; } 
     public DbSet<Address> Addresses { get; set; } 
    } 

et la chaîne de connexion: -

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
    <add name="AddressBook" connectionString="Data Source=MyMachine;Initial Catalog=AddressBook;Integrated Security=True;MultipleActiveResultSets=True;providerName=System.Data.SqlClient"/> 
    </connectionStrings> 
</configuration> 

Ainsi, le nom de la base de données est "AddressBook" et l'erreur se produit lorsque j'initialise l'objet AddressBook. Je vois des gens suggérant d'ajouter (providerName = "System.Data.SqlClient") à la chaîne de connexion. Mais ça ne marche pas dans mon cas. Est-ce que je manque quelque chose ici?

+0

@leppie, merci pour l'édition et le formatage de ma question. –

Répondre

34

Vous devez ajouter System.Data.SqlClient comme valeur à un nouvel attribut nommé "ProviderName". Juste comme ci-dessous: -

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
    <add name="AddressBook" providerName="System.Data.SqlClient" connectionString="Data Source=MyMachine;Initial Catalog=AddressBook;Integrated Security=True;MultipleActiveResultSets=True;"/> 
    </connectionStrings> 
</configuration> 
3

J'ai eu la même erreur quand j'ai téléchargé mon site Web au serveur de production. Ma chaîne de connexion possédait la propriété providerName. Le cuase du problème était une chaîne de connexion dans machine.config nommé LocalSqlServer et un fournisseur de rôle qui a utilisé cette chaîne de connexion:

<roleManager> 
    <providers> 
    <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    .... 

Tout ce que je devais faire était des chaînes de connexion de compensation et les fournisseurs de rôle avant d'enregistrer le mien:

<connectionStrings> 
    <clear/> 
    <add name="DbEntities" connectionString="..." providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    ... 
    <roleManager defaultProvider="DefaultRoleProvider" enabled="true"> 
    <providers> 
     <clear/> 
     <add name="DefaultRoleProvider" ... /> 
    </providers> 
    </roleManager>