MySql и Entity Framework случайным образом выдают заданную схему, неверную ошибку
Я использую Entity Framework для доступа к моей базе данных MySQL. Модель была сгенерирована с использованием EDMGEN2 и все отлично работает. Я могу сделать все мои добрые запросы linq-to-entity...
... пока не пройдет неопределенное количество времени, и я получу сообщение об ошибке "ProviderManifestToken" 5 "отличается от" 5.1 ", с которым мы столкнулись ранее". Почему сначала встречается "5", когда я указал только "5.1"?!!?
Единственный способ остановить ошибку - это повторно загрузить файл edmx (который не изменился вообще), перезаписав предыдущий файл. В этот момент приложение будет радостно отправлять данные пользователям, пока BAM не произойдет, возможно, через несколько часов, иногда через несколько дней, и мне придется снова начать преследовать меня.
Я попытался изменить ProviderManifestToken="5.1" на "MySQL", "6", "5", и произойдет та же самая ситуация: работает некоторое время, затем ошибка. В качестве бонуса у меня есть только ОДИН edmx-файл в приложении веб-форм vb.net, так с чем это смущает?
первые несколько строк моего файла edmx выглядят так:
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
<edmx:Runtime>
<edmx:StorageModels>
<Schema Namespace="v2Model.Store" Alias="Self" Provider="MySql.Data.MySqlClient" ProviderManifestToken="5.1" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">
<EntityContainer Name="v2ModelStoreContainer">.....
и моя строка подключения в web.config выглядит так:
<add name="v2Entities" connectionString="metadata=res://*;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;database=v2;uid=username;pwd=password"" providerName="System.Data.EntityClient" />
Это продолжалось в течение последнего месяца, и я не могу выяснить источник проблемы для моей жизни! Любые предложения будут оценены
Настройка выглядит следующим образом:
Windows Server 2003 MySQL v 5.1.38 (также пробовал на 5.1.36) Connector/NET 6.1.1.0 (также пробовал на 6.0.4.0)
Ошибка заключается в следующем:
Указанная схема недействительна. Ошибки: MySql.Data.Entity.Properties.SchemaDefinition-5.1.ssdl(4,9): ошибка 0169: все артефакты SSDL должны предназначаться для одного и того же поставщика. ProviderManifestToken "5" отличается от "5.1", который встречался ранее.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (4,9): ошибка 0169: все артефакты SSDL должны предназначаться для одного и того же поставщика. ProviderManifestToken "5" отличается от "5.1", который встречался ранее.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (7,4): ошибка 0019: имя EntityContainer должно быть уникальным. EntityContainer с именем "Схема" уже определен.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (336,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Table" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (348,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.TableColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (374,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.View" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (386,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (412,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Function" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (437,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Procedure" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (447,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Parameter" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (471,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Constraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (483,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.CheckConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (491,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ConstraintColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (500,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ForeignKeyConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (509,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ForeignKey" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (520,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (535,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.TableTableConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (548,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ConstraintConstraintColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (561,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ConstraintForeignKey" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (574,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.FromForeignKeyColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (587,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ToForeignKeyColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (600,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.TableTableColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (613,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewViewColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (626,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.FunctionFunctionParameter" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (639,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ProcedureProcedureParameter" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (652,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewViewConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (665,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewConstraintConstraintColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (678,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewConstraintForeignKey" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (691,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.FromForeignKeyViewColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-5.0.ssdl (704,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ToForeignKeyViewColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (4,9): ошибка 0169: все артефакты SSDL должны предназначаться для одного и того же поставщика. ProviderManifestToken "5" отличается от "5.1", который встречался ранее.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (7,4): ошибка 0019: имя EntityContainer должно быть уникальным. EntityContainer с именем "Схема" уже определен.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (391,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Table" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (403,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.TableColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (429,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.View" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (441,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (467,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Function" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (492,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Procedure" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (502,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Parameter" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (526,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.Constraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (538,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.CheckConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (546,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ConstraintColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (555,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ForeignKeyConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (564,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ForeignKey" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (575,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (590,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.TableTableConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (603,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ConstraintConstraintColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (616,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ConstraintForeignKey" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (629,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.FromForeignKeyColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (642,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ToForeignKeyColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (655,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.TableTableColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (668,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewViewColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (681,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.FunctionFunctionParameter" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (694,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ProcedureProcedureParameter" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (707,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewViewConstraint" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (720,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewConstraintConstraintColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (733,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ViewConstraintForeignKey" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (746,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.FromForeignKeyViewColumn" уже определено.
MySql.Data.Entity.Properties.SchemaDefinition-6.0.ssdl (759,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа "MySqlClient.ToForeignKeyViewColumn" уже определено.
5 ответов
Я все еще не уверен в точной причине, но следующее, кажется, исправляет случайный сбой:
Изменение
metadata=res://*;
Для реального пространства имен файла EDMX, кажется, работает:
metadata=res://MyApplication.Entities;
Проблема исправления строки подключения теперь выглядит следующим образом:
<add name="v2Entities" connectionString="metadata=res://MyApplication.Entities;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;database=v2;uid=username;pwd=password"" providerName="System.Data.EntityClient"/>
Изменение строки подключения для включения пространства имен проекта /EDMX сработало для меня. Но без ".Entities".
В моем случае у меня было решение с несколькими проектами, каждый из которых имел файл EDMX, ссылающийся на другую базу данных MySQL. По отдельности нормально, но при запуске вместе при проведении тестирования получены ошибки, упомянутые выше.
Окей, ребята, у меня возникла эта проблема внезапно с MySql Connector 6.2.2 после нескольких месяцев использования с ней фреймворка сущностей без каких-либо проблем.
Я повторил свои шаги, я сделал 2 вещи, я не знаю, что испортило это, но это был один из них, тогда я скажу вам, что я сделал в Web.config
починить это.
Я играл с набором инструментов Ajax и другим набором инструментов для построения графиков в приложении, над которым я работал.
Играя в своем приложении, я попытался привязать данные к диаграмме к EntityDataSource, используя мастер создания нового источника данных из представления конструктора.
Я также сделал некоторые подключения к данным, используя базовые соединения ado.net с пространством имен MySQL.Data. Моим приложением были твердо типизированные наборы данных и структура сущностей.
Возможно, он добавил дополнительную ссылку на коннектор MySql /net apis, делающий это. У меня есть Windows 7, и он сделал резервную копию моего приложения 4 дня назад, поэтому я восстановил его и сравнил 2 файла веб-конфигурации. Разница была в том, что приложение, которое сообщало мне об этой ошибке, содержало дополнительные ссылки на сборки в конце раздела "Сборки":
<add assembly="MySql.Data.Entity, Version=6.2.2.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D" />
<add assembly="MySql.Web, Version=6.2.2.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D" />
Я удалил все, что вам нужно из MySql:
<add assembly="MySql.Data, Version=6.2.2.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D" />
Я надеюсь, что это решит чью-то проблему!
Для некоторых людей, пожалуйста, очистите папку bin и повторите попытку. Для меня, я получаю эту ошибку при развертывании на сайте сервера 2003. Я переименовал проект, и там была старая сборка (.dll). Так как строка подключения начиналась с "res://*;...", она искала ресурс во ВСЕХ сборках (даже не загруженных) и находила дубликаты (очевидно).
Я изменил файл web.config следующим образом, и он сработал
<add name="myConnection" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;port=3306;userid=root;password=;database=testdb;persistsecurityinfo=True" />