2010-08-30 9 views
15

Ok, questo potrebbe non essere correlato a EF. Sto cercando di utilizzare la funzione di codice prima e dopo è quello che ho scritto: -Entity Framework - Previsto stringa non vuota per il parametro '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 contesto: -

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

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

e la stringa di connessione: -

<?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> 

Quindi, il nome del database è "AddressBook" e l'errore si verifica quando inizializzo l'oggetto AddressBook. Vedo persone che suggeriscono di aggiungere (providerName = "System.Data.SqlClient") alla stringa di connessione. Ma non funziona nel mio caso. Mi sto perdendo qualcosa qui?

+0

@leppie, grazie per la modifica e la formattazione della mia domanda. –

risposta

34

È necessario aggiungere System.Data.SqlClient come valore a un nuovo attributo denominato "ProviderName". Proprio come di seguito: -

<?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

Ho avuto lo stesso errore quando ho caricato il mio sito Web sul server di produzione. La mia stringa di connessione aveva il set di proprietà providerName. La cuasa del problema era una stringa di connessione in machine.config denominata LocalSqlServer e un provider di ruoli che ha utilizzato quella stringa di connessione:

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

Quindi tutto quello che dovevo fare era cancellare stringhe di connessione e provider di ruoli prima della mia registrazione:

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