Avatar billede poul10 Nybegynder
08. juli 2009 - 22:06 Der er 19 kommentarer og
1 løsning

MySql .NET Connector 6.0.4 og Entity Framework - IServiceProvider interface error

Hej,
Jeg bruger MySql .NET Connector 6.0.4 og Entity Framework. På localhost virker det fint, men når jeg smider det ud på mit webhotel får jeg følgende fejl:

-----------------

The store provider factory type 'MySql.Data.MySqlClient.MySqlClientFactory' does not implement the IServiceProvider interface. Use a store provider that implements this interface.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.ProviderIncompatibleException: The store provider factory type 'MySql.Data.MySqlClient.MySqlClientFactory' does not implement the IServiceProvider interface. Use a store provider that implements this interface.

-----------------
Avatar billede arne_v Ekspert
08. juli 2009 - 22:14 #1
Har du uploaded MySql.Data.dll til din web apps bin dir ?
Avatar billede poul10 Nybegynder
08. juli 2009 - 22:22 #2
Nej.. jeg prøvede det lige, uden held.. Samme fejl :\
Avatar billede arne_v Ekspert
08. juli 2009 - 22:27 #3
Og du er sikker på at det er den som bliver loadet efter at du har genstartet web app ? (og ikke den som web hotellet tilfaeldigvis har installeret)
Avatar billede poul10 Nybegynder
08. juli 2009 - 22:35 #4
Nej, det ved jeg faktisk ikke, hvordan kan jeg være sikker på det?

Derudover har jeg jo først tilføjet MySql.Data.dll da du nævnte det, men det virkede fint uden på localhost?
Jeg er ikke den skarpeste på området, så forklar endelig :)
Men jheg har i bund og grund lavet et projekt som indeholder en Entity Data Model og den har så en forbindelse til min MySql db.. Da jeg så testede det på localhost virkede det hele fint, også uden en MySql.Data.dll, men den er måske gemt et sted?
Avatar billede poul10 Nybegynder
08. juli 2009 - 22:41 #5
Problemet er Entity Data Modellen, da jeg sagtens kan lave en web app. som henter tingene ud fra MySql dben via. den samme .NET connector.. så snart der kommer en .edmx fil ind i billedet, så laver den ovenstående fejl
Avatar billede arne_v Ekspert
08. juli 2009 - 22:48 #6
Hvis du kunne hente data ud inden du smed den .dll op, saa betyder det at din web app har brugt en central kopi af MySql.Data.dll og naar den ikke understoetter det som virker paa din udviklings maskine, saa maa det vaer en aeldre version.

Tricket er at komme til at bruge den nyere version.
Avatar billede poul10 Nybegynder
08. juli 2009 - 22:51 #7
Hvordan kommer jeg til at bruge den nye version må så blive mit næste spørgsmål :D
Avatar billede poul10 Nybegynder
08. juli 2009 - 22:55 #8
Du har ret i at jeg bruger en nyere version af dllen.. mit web hotel bruger 5.2.5.0, mens jeg bruger 6.0.4.0.. Men stadigvæk, hvordan fortæller jeg at den skal bruge den dll jeg smider med i projektet og ikke den centrale?
Avatar billede poul10 Nybegynder
08. juli 2009 - 23:11 #9
Nu har jeg fået tilføjet den rigtige .dll og fået lagt op..
Jeg får dog stadigvæk samme fejl som i starten, jeg kan ikke lure det
Avatar billede poul10 Nybegynder
08. juli 2009 - 23:22 #10
Det lader jo til at den stadigvæk læser den .dll som er på serveren, 5.2.5.0, da den ikke implementerer IServiceProvider interfacet, hmm.
Avatar billede arne_v Ekspert
09. juli 2009 - 03:28 #11
Har du uploadet den nye fil til det rigtige bin dir?
Avatar billede poul10 Nybegynder
09. juli 2009 - 03:32 #12
Ja, den ligger i det rigtige bin dir
Er vi ude i noget assembly bind redirect hvor man siger den skal være 6.0.4.0 og ikke 5.2.5.0?
Avatar billede arne_v Ekspert
09. juli 2009 - 03:45 #13
Hvis du laver en lille DLL med en tilfældig dummy kode - kan du så bruge den i dine .aspx sider ?
Avatar billede arne_v Ekspert
09. juli 2009 - 03:45 #14
Og du har naturligvis genstartet app ?
Avatar billede poul10 Nybegynder
09. juli 2009 - 03:58 #15
Ja, jeg kan sagtens lave en dummy dll med en metode som returnerede en streng og få denne vist på siden, det er ikke noget problem
Avatar billede poul10 Nybegynder
09. juli 2009 - 04:15 #16
I bund og grund handler det nu om at fortælle min web app. at når jeg tilføjer MySQL.Data.dll i version 6.0.4.0, så er skal den bruge den der ligger i projektet og ikke den der ligger på serveren.. .edmx filen bruger denne conn string, men skal provideren pege på noget andet når det er den i projektet?

  <connectionStrings>
    <add name="test_dk_dbEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string="server=xxxx;user id=xxxx;password=xxxx;database=xxxx;persist security info=True"" providerName="System.Data.EntityClient" />
  </connectionStrings>
Avatar billede poul10 Nybegynder
09. juli 2009 - 18:33 #18
Har svært ved at se hvordan det løser mine problemer daniel :)
Avatar billede arne_v Ekspert
09. juli 2009 - 19:02 #19
Det virker som om at den centralt installerede MySql kommer foer den i bin dir.

Jeg kan kommae i tanke om to workarounds:

1) Compile din ASP.NET web app lokalt og upload (fordi saa vil den referere til den rigtige version af MySQL connector og bruge den).

2) Hent source til MySQL connector og aendre namespace og rebuild den. Saa kan du bare bruge det nye navn.
Avatar billede poul10 Nybegynder
09. juli 2009 - 19:02 #20
Jeg har tilføjet følgende til min web.config:

  <system.data>
    <DbProviderFactories>
      <clear />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.0.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

Nu kommer den videre fra hvor den fejlede på interfacet..
Dog er der kommet et ny fejl:

[NullReferenceException: Object reference not set to an instance of an object.]
  MySql.Data.MySqlClient.MySqlClientFactory.get_MySqlDbProviderServicesInstance() +77

Det virker stadigvæk fint på localhost og jeg kan ikke se hvad det er MySQL .NET Connector 6 skal installere på min computer som gør at det virker uden problemer..
Hvis jeg fjerner Connectoren fra Tilføj/fjern fejler den på samme måde som på mit webhotel, også selvom jeg har alle de tilhørende .dll'er med i solutionen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester