7

MySql.Data私の人生では、MySql コネクタ 6.6.5.0 (参照) と MySql Entity 6.5.4.0 (参照)を使用して、MySql データベースで C# WinApp を Entity Framework 5.0 と連携させることはできませんMySql.Data.Entity。Using .Net Framework 4.5 on Visual Studio 2012. この記事の執筆時点では、上記のバージョンはすべて最新の安定版です。

これが私がapp.configに持っているものです

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.data>
    <DbProviderFactories>
      <add name="MySQL Data Provider" 
           invariant="MySql.Data.MySqlClient" 
           description=".Net Framework Data Provider for MySQL" 
           type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="MyConnectionName" 
         connectionString="Server=mysql13.myserver.com.br;Database=mydb;User Id=username;Pwd=pa$$w0rd;" 
         providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data">
    </defaultConnectionFactory>
  </entityFramework>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.6.5.0" newVersion="6.6.5.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

コード内

ユーザークラス

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual List<Permission> Permissions { get; set; }

    public User()
    {
        Permissions = new List<Permission>();
    }
}

public class Permission
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

public class UserContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Permission> Permissions { get; set; }
}

新しいレコードの作成

        using (var db = new UserContext())
        {
            Permission permission1 = new Permission() { Name = "Permission 1", Description = "The desc 1" };
            Permission permission2 = new Permission() { Name = "2nd Perm", Description = "Desc2" };
            User user = new User() { Name = "Joao" };
            user.Permissions.Add(permission1);
            user.Permissions.Add(permission2);

            db.Users.Add(user);
            db.SaveChanges();
        }

そして、私は行で例外を受け取りますdb.Users.Add(user);

System.InvalidOperationException was unhandled
  HResult=-2146233079
  Message=Failed to set Database.DefaultConnectionFactory to an instance of the 'MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data' type as specified in the application configuration. See inner exception for details.
  Source=EntityFramework
  StackTrace:
       at System.Data.Entity.Internal.AppConfig.<.ctor>b__1()
       at System.Lazy`1.CreateValue()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at System.Lazy`1.get_Value()
       at System.Data.Entity.Internal.AppConfig.get_DefaultConnectionFactory()
       [removing the rest of the stack]
  InnerException: System.InvalidCastException
       HResult=-2147467262
       Message=Unable to cast object of type 'MySql.Data.MySqlClient.MySqlClientFactory' to type 'System.Data.Entity.Infrastructure.IDbConnectionFactory'.
       Source=EntityFramework
       StackTrace:
            at System.Data.Entity.Internal.AppConfig.<.ctor>b__1()
       InnerException: 

無駄にセクションを追加Culture=neutral, PublicKeyToken=c5687fc88969c44dするなど、いくつかのことを試しました..DbProviderFactories

NuGet Package Manager を使用して、Entity Framework、MySql Data Connector、および MySql.Data.Entity を追加しました。

同様の問題を抱えた他の多くの投稿を見てきましたが、明確な解決策を見つけることができません。特に、バージョン管理コンボ EF 5 + MySql Connector 6.6.5.0 ではそうです。

誰かがこれを機能させましたか?app.config とコードの両方を投稿して動作させることはできますか?

4

4 に答える 4

5

MySQL コネクタ 6.6.5 は、ここで説明されているように Entity Framework 4.3 のみをサポートします。私は個人的にそれを使用しており、これまでのところうまくいきました。ただし、特に Entity Framework 5 が必要な場合は、こちら で説明されているように現在サポートされている MySQL Connector 6.6.7 Beta を使用する必要があります。ただし、v 6.6.7 は試していません。

更新 1: MySQL コネクタ 6.6 で EF 4.3 コード ファーストを使用することに関するブログ投稿は、こちら にあります

更新 2: EF 4.3 と MySql Connector 6.6.5 を使用した .NET 4.5 コンソール アプリケーションのサンプルはこちら.

于 2013-05-07T06:59:12.637 に答える
0

EFでmysqlを使用した最初の日に同じ問題に遭遇しました。そして、あなたの設定が間違っていることがわかりました。

  <entityFramework>
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity">
</defaultConnectionFactory>

また、.net 4.5 用のコネクタは EF 4.4 のみをサポートするため、.net フレームワーク 4.5 と .net 4.5 用の mysql コネクタ ライブラリと EF 5 用の mysql コネクタ ライブラリを必ず使用してください。

于 2013-08-20T05:26:54.297 に答える