2015-02-25 11 views
2

Я пытаюсь заставить Entity Framework 6 работать с базой данных MySQL. Я следую этому руководству:Entity Framework 6 с MySQL

http://bitoftech.net/2015/01/21/asp-net-identity-2-with-asp-net-web-api-2-accounts-management/

Где я заменить локальную базу данных с одного MySQL. Я установил пакет MySQL.NET Connector/Net Nuget. Однако замена строки подключения на мой хост вызывает проблемы. Я не могу заставить команду enable-migrations работать правильно. На их страницах FAQ'ы, мой хозяин заявляет, что вам нужно использовать это соединение строку:

Server=myServerAddress;Database=MyDataBase;User=MyUser;Password=myPassword 

Который привел меня к этой строке соединения:

<add name="DefaultConnection" connectionString="Server=12.345.6.789:1234;Database=MyDatabaseName;User=MyUserName;Password=MySuperSecretPassword" providerName="System.Data.SqlClient" /> 

я установил IP и номер_порт они дали мне в качестве сервера , Обратите внимание на имя поставщика. Я получаю эту ошибку при запуске Enable-миграции в консоли:

An error occurred accessing the database. This usually means that the connection to the database failed. Check that the connection string is correct and that the appropriate DbContext constructor is being used to specify it or find it in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=386386 for information on DbContext and connections. See the inner exception for details of the failure.

Когда я переключаю ProviderName к MySql.Data.MySqlClient, я получаю эту ошибку:

No Entity Framework provider found for the ADO.NET provider with invariant name 'MySql.Data.MySqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

Что я делаю неправильно? Каков самый простой способ настроить подключение к моей базе данных MySQL с помощью EF6?

Edit: Мой текущий web.config:

<connectionStrings> 
<add name="DefaultConnection" connectionString="Server=x.x.x.x;Database=RademaekAuthentication;User=x;Password=x" providerName="MySql.Data.MySqlClient" /> 
</connectionStrings> 

<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
</providers> 
+0

В качестве краткой заметки об использовании MySQL с ef. Я потратил очень много времени на использование соединителя mysql для .net. Это принципиально ошибочно во многих аспектах, как и mysql для использования с .net. Отсутствие поддержки в структуре базы данных ISAM mysql для транзакций и ее агрессивных блокировок чтения делают ее нецелесообразной с одновременными пользователями. Я бы предложил переключиться на MSSQL как можно скорее и избежать этой головной боли и всех в будущем. –

+0

Мне бы очень понравилось использовать исключительно интегрированный MSSQL, я согласен с вами на 100%. Тем не менее, хозяин взимает дополнительные расходы за привилегию использования баз данных MSSQL. Мой клиент не хочет тратить лишние деньги. – ohyeah

+0

Я так понимаю, но цена действительно не такая уж важная, потому что размер базы данных будет очень маленьким. Вы, скорее всего, никогда не превысите 10 мб в небольшом проекте. Часто вы можете получить небольшую сумму, даже до 1 гб, за 10 долларов США за месяц, что имо разумно. Кроме того, время, которое вы тратите на MySQL, значительно перевешивает экономию использования. По крайней мере, произведите впечатление на них значение * your * time :) –

ответ

1

Внутри вашего web.config, вся конфигурация находится под тегом <configuration>. Везде внутри, что вам нужно иметь

<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="v11.0" /> 
    </parameters> 
</defaultConnectionFactory> 
<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
</providers> 
</entityFramework> 
+0

Я добавил второй дочерний узел invantName поставщикам, и, чтобы быть в безопасности, я также добавил ссылку на MySql.Data.Entity.EF6. Тем не менее, я все еще получаю первую ошибку (произошла ошибка при доступе .....). – ohyeah

+0

@Bas - Вы используете 'MySql.Data.MySqlClient' как имя поставщика в вашей строке подключения? –

+0

Спасибо за помощь! Я добавил свой текущий web.config к моему ответу. – ohyeah

0

Недавно я имел эту проблему и решить ее с помощью следующей строки подключения:

<add name="DefaultMySqlConnection" providerName="MySql.Data.MySqlClient" connectionString="Data Source=localhost; port=3306; Initial Catalog=<name>; uid=<user>; pwd=<password>;" /> 

Web.config также содержит следующее:

<entityFramework> 
<defaultConnectionFactory 
    type="System.Data.Entity.Infrastructure.SqlConnectionFactory, 
      EntityFramework" /> 
<providers> 
<provider 
    invariantName="MySql.Data.MySqlClient" 
    type="MySql.Data.MySqlClient.MySqlProviderServices, 
      MySql.Data.Entity.EF6" /> 
</providers> 

И в теге system.data (создать его прямо перед </configuration> тега, если он не существует), добавьте следующий код:

<DbProviderFactories> 
    <remove invariant="MySql.Data.MySqlClient" /><add name="MySQL" description="ADO.Net driver for MySQL" invariant="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/> 
</DbProviderFactories> 

Это мой DbContext класс:

[DbConfigurationType(typeof(MySqlEFConfiguration))] 
public class DatabaseContext : DbContext 
{ 
    public DatabaseContext(string connectionString) 
     : base(connectionString) 
    { } 

После этого убедитесь, что для запуска миграции и это многообещающе работы ,

EDIT: Возможно, стоит упомянуть, что в моей конфигурации нет части <providers>.

Смежные вопросы