2010-08-30 16 views
15

Tamam, bu EF ile ilgili olmayabilir. Ben kod birinci özelliği kullanabilmek için çalışıyorum ve takip ediyorum yazdıklarımı geçerli: -Entity Framework - 'providerInvariantName' parametresi için boş olmayan dizenin bekleniyor

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()); 

      } 

bağlam sınıfı: -

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

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

ve bağlantı dizesi: -

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

Yani, veritabanı adı "AddressBook" ve AddressBook nesnesini başlattığımda hata oluyor. Bağlantı dizesine (providerName = "System.Data.SqlClient") eklemeyi öneren kişilerin olduğunu görüyorum. Ama benim durumumda çalışmıyor. Burada bir şey eksik miyim?

+0

@leppie, sorgumu düzenleme ve biçimlendirme için teşekkürler. –

cevap

34

System.Data.SqlClient değerini "ProviderName" adlı yeni bir öznitelik değeri olarak eklemelisiniz. Aşağıdaki gibi: -

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

Web sitemi üretim sunucusuna yüklediğimde de aynı hatayı aldım. Bağlantı dizgimde providerName özellik kümesi vardı. Sorunun cuase LocalSqlServer adlı machine.config bir bağlantı dizesi ve kullanılan bir rol sağlayıcısı oldu bağlantı dizesi: Yani

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

Ben kayıt mayın önce bağlantı dizeleri ve rol sağlayıcılarını takas yapmak zorunda olduğunu:

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