Как изменить базу данных - Схема, используемая Entity Framework (база данных mysql)? - PullRequest
4 голосов
/ 20 августа 2009

Я использую EntityFramework в проекте для подключения к базе данных Mysql. Провайдер - Devart Dot.connect.

Это приложение должно подключаться к базе данных, используя параметры подключения, заданные пользователем во время выполнения. Это включает, конечно, имя базы данных Mysql.

Я использовал классы EntityConnectionStringBuiler и EntityConnection для создания и хранения пользовательских параметров подключения.

Проблема в том, что даже при таких заданных параметрах приложение всегда подключается к базе данных, указанной при проектировании EntityModel с помощью мастера Visual Studio. Что очень странно, так это то, что при отладке и проверке состояния ObjectContext правильно используются пользовательские параметры подключения ... Меня бесит !!!!! Любая подсказка?

Ответы [ 2 ]

9 голосов
/ 20 августа 2009

Потратив один день на эту проблему, я наконец понял, что проблема возникла из файла model.edmx.

В этом файле у вас есть одна строка на EntitySet. В каждом элементе EntitySet есть атрибут, называемый схемой. В случае SQL Server этому атрибуту присваивается соответствующая схема таблицы:

EntitySet Name = "annee_civile" EntityType = "openemisModel.Store.annee_civile" store: Type = "Tables" Schema = "mydatabase" />

Если вы указываете имя Схемы, когда создаете свой собственный EntityConnection, создается впечатление, что существует конфликт и, наконец, Схема, определенная в файле edmx, будет использоваться, даже если вы указали другую в параметрах соединения.

Решение состоит в том, чтобы просто удалить имя схемы из файла edmx. Это работает для MysQL, вероятно, не при подключении к серверу SQL.

EntitySet Name = "annee_civile" EntityType = "openemisModel.Store.annee_civile" store: Type = "Tables" Schema = "" />

EntityConnectionStringBuilder:

string provideString = "Идентификатор пользователя = xxxx; Пароль = xxx; Хост = xxxx; База данных = anydatabasename"; EntityConnectionStringBuilder entityConnBuilder = new EntityConnectionStringBuilder (); entityConnBuilder.Provider = "Devart.Data.MySql"; entityConnBuilder.Metadata = @ "res: ///OpenEmisModel.csdl | res: ///OpenEmisModel.ssdl | res: //*/OpenEmisModel.msl"; entityConnBuilder.ProviderConnectionString = provideString;

EntityConnection и контекст объекта, использующий его:

EntityConnection entityConConionionEmis = новый EntityConnection (entityConnBuilder.ConnectionString);

objectcontextEntities testingContext = новый objectcontextEntities (entityConnexionEmis);

Программа теперь может подключаться к любому имени базы данных.

Надеюсь, это поможет.

0 голосов
/ 14 июня 2016

Ссылка на dll Devart.Data.MySql.Entity.EF6.dll в проекте.

Где-то, когда ваше приложение запускается и перед выполнением операций с базой данных, добавьте следующее:

var config = MySqlEntityProviderConfig.Instance;
config.Workarounds.IgnoreSchemaName = true;

Вам понадобится ссылка:

using Devart.Data.MySql.Entity.Configuration;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...