2010-08-30 8 views
15

Ok, może to nie być związane z EF. Próbuję użyć funkcji kodu pierwszego i oto co napisałem: -Entity Framework - oczekiwanie niepustego łańcucha dla parametru "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()); 

      } 

Klasa kontekst: -

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

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

i ciąg połączenia: -

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

Tak więc nazwa bazy danych to "AddressBook", a błąd występuje, gdy inicjalizuję obiekt AddressBook. Widzę, że ludzie sugerują dodanie (providerName = "System.Data.SqlClient") do ciągu połączenia. Ale to nie działa w moim przypadku. Czy tu czegoś brakuje?

+0

@leppie, dziękuję za edycję i sformatowanie mojego pytania. –

Odpowiedz

34

Powinieneś dodać System.Data.SqlClient jako wartość do nowego atrybutu o nazwie "ProviderName". Tak jak poniżej: -

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

Miałem ten sam błąd, gdy przesyłałem moją witrynę do serwera produkcyjnego. Mój ciąg połączenia miał ustawioną właściwość providerName. Cuase problemu był ciąg połączenia w machine.config nazwie LocalSqlServer i dostawcą rola, jaką zastosował że ciąg połączenia:

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

Więc wszystko, co musiałem zrobić, to wyczyścić ciągi połączeń i dostawców ról przed zarejestrowaniem kopalni:

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