The provider for invariant name 'System.Data.SqlClient' is specified multiple times in the application configuration

alattin (17127) 10 yıl önce sordu

Asp.net MVC uygulamasında alt uygulamaya erişmek istediğimde aşağıdaki gibi hata alıyorum

An error occurred creating the configuration section handler for entityFramework: The provider for invariant name 'System.Data.SqlClient' is specified multiple times in the application configuration. The invariant name must be unique for each configured provider. (C:\inetpub\wwwroot\tt\panel\web.config line 106)

The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception.

Asp.net uygulaması bir root yani ana bir de alt uygulaman oluşuyor.

C:\inetpub\wwwroot\tt\ (Root)

C:\inetpub\wwwroot\tt\panel (Alt uygulama)

Her iki uygulamada .Net Framework 4.5 kullanıyor.

The provider for invariant name 'System.Data.SqlClient' is specified multiple times in the application configuration hatasının sebebi nedir?

 

Toplam 1 cevap


alattin (17127) 10 yıl önce cevapladı

Asp.Net MVC ile uygulama geliştiriyor ve uygulamanızın altında alt uygulamalar varsa bu alt uygulamalarda da Entity Framrwork gibi ortak bir bileşen  kullanıyorsanız Web.config dosyasının miras alma özelliğinin olduğunu unutmamalısınız.

Örnegin web siteniz aşağıdaki gibi birden fazla uygulama (Application) barındırıyorsa

C:\inetpub\wwwroot\tt\ (Root)
C:\inetpub\wwwroot\tt\panel (Alt uygulama)

TT uygulamasının Web.config içindeki değerleri Panel uygulamasına miras ile aktarılacaktır.

Web.config dosyasında miras alma işleminini durdurmak için Location ifadesini kullanabilirsiniz.

 <location path="." inheritInChildApplications="false"> </location>

Web.config içerisinde hata veren Entity Framework girdisini location ile aşağıdaki gibi sararsanız miras alma işlemi engellenecektir. Location ifadesinde inheritInChildApplications="false"  özellik ve değeri miras almayı durduracaktır.

Entity Framework için şu ifade Root web.config'e uygulanmalıdır.

 <location path="." inheritInChildApplications="false">
    <entityFramework>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
      <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      </providers>
    </entityFramework>
  </location>