Entity Framework - Attente d'une chaîne non vide pour le paramètre 'providerInvariantName'

.net ado.net c# entity-framework

Question

Ok, cela peut ne pas être lié à EF. J'essaie d'utiliser la fonctionnalité code-first et voici ce que j'ai écrit: -

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 personnes suggérant d'ajouter (providerName = "System.Data.SqlClient") à la chaîne de connexion. Mais cela ne fonctionne pas dans mon cas. Est-ce que je manque quelque chose ici?

Réponse acceptée

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>

Réponse populaire

J'ai eu la même erreur lorsque j'ai téléchargé mon site Web sur le serveur de production. Ma chaîne de connexion avait la propriété providerName définie. Le problème était lié à une chaîne de connexion dans machine.config nommée LocalSqlServer et à un fournisseur de rôle ayant 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" />
   ....

Donc, tout ce que j'avais à faire était d'effacer les chaînes de connexion et les fournisseurs de rôles avant d'enregistrer la mienne:

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


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow