Общий хостинг + Entity Framework + MySQL = Ошибки поставщика данных? - PullRequest
3 голосов
/ 30 ноября 2010

давний слушатель, впервые звонящий!

Я пытаюсь подключиться к MySQL с помощью ADO.NET Entity Framework. (Visual Studio 2010, .NET 4.0) Я создал веб-проект и другой проект библиотеки классов, который будет служить моим DAL. На моей локальной машине у меня нет проблем, и я также попытался запустить со средним доверием. Я могу полностью контролировать БД, как и ожидалось.

Однако при развертывании на хосте (общий, средний уровень доверия) я получаю ошибки. Я настроил свой web.config несколькими способами: я явно назвал свою сборку в строке подключения, я использовал сопоставление с подстановочными знаками, добавил ссылки на библиотеки MySQL и т. Д.


<connectionStrings>
    <add name="NamespaceContext" connectionString="metadata=res:// Namespace.Data.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null/DataModel.csdl|res:// Namespace.Data.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null/DataModel.ssdl|res:// Namespace.Data.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null/DataModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=myserver;User Id=user;database=thedatabase;password=password;Persist Security Info=True&quot;" providerName="System.Data.EntityClient"/>
    <add name=" NamespaceContext " connectionString="metadata=res://*/;provider=MySql.Data.MySqlClient;provider connection string=&quot; server=myserver;User Id=user;database=thedatabase;password=password;Persist Security Info=True&quot;" providerName="System.Data.EntityClient"/>
        <add name=" NamespaceContext " connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot; server=myserver;User Id=user;database=thedatabase;password=password;Persist Security Info=True&quot;" providerName="System.Data.EntityClient" />
 </connectionStrings>

Ошибка, которую я продолжаю получать:

System.ArgumentException: The specified store provider cannot be found in the configuration, or is not valid. ---> 
System.ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed. 
at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) 
at System.Data.EntityClient.EntityConnection.GetFactory(String providerString) 
--- End of inner exception stack trace --- 
at System.Data.EntityClient.EntityConnection.GetFactory(String providerString)
at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
at System.Data.EntityClient.EntityConnection..ctor(String connectionString)
at MyNamespace.Web.Html.TestPage.EntityFrameworkTestButton_Click(Object sender, EventArgs e)

Я говорил с их парнями из службы поддержки (которые не являются разработчиками), но они сказали, что коннектор MySQL установлен и в GAC. Я попытался использовать раздел DbProviderFactories в моем файле web.config, например:

<system.data>
    <DbProviderFactories>
      <clear/>
      <remove invariant="MySql.Data.MySqlClient"/>
      <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.3.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
    </DbProviderFactories>
  </system.data>

Я надеялся, что смогу контролировать это и ссылаться на провайдера в моем проекте. Затем я получаю следующую ошибку:

System.Data.MetadataException: Schema specified is not valid. 
Errors: error 0194: All artifacts loaded into an ItemCollection must have the same version. Multiple versions were encountered. 
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl(4,9) : error 0169: All SSDL artifacts must target the same provider. The ProviderManifestToken '5' is different from '5.0' that was encountered earlier. 
error 0194: All artifacts loaded into an ItemCollection must have the same version.

(для краткости было взято множество одинаковых сообщений об ошибках)


Я в полной растерянности. Я пытался подписать мой проект DAL, не используя DAL и просто создавая .edmx в веб-проекте, но все безрезультатно. Я мог поклясться, что в какой-то момент все заработало, но, возможно, я был в бреду.

Извините за стену, текст. Кто-нибудь может помочь или пролить свет?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 мая 2012

У меня была очень похожая проблема в моем приложении, где я использовал коннектор MySQL для базы данных MySQL и Entity Framework для базы данных SQL Server (два отдельных соединения, один проект). DLL-библиотека MySQL.Data.Entity, похоже, борется с платформой сущностей. Я на самом деле не нуждался в этом, поэтому я удалил его ... но ошибка сохранилась!

Наконец, в отчаянии, я просто удалил папки bin и obj и перекомпилировал. Задача решена. Я предполагаю, что что-то было кэшировано или зависало в моих папках, даже после того, как я провел чистую и восстановленную сборку. Что-то попробовать в любом случае, если кто-то столкнется с этим.

0 голосов
/ 30 ноября 2010

Что произойдет, если вы поместите mysql dll в папку bin?В качестве альтернативы, попробуйте снять ограничение версии на mysql dll, у них может не быть той точной версии, загруженной на их серверах.

...