29

Entity Framework4を使用したコードファースト開発に関するScottGuthrieの最新の投稿を少し試してみようと思いました。SQLServerを使用する代わりに、MySqlを使用しようとしています。これが私のweb.configの関連部分です(これはAsp.Net MVC 2アプリです):

<connectionStrings>
    <add name="NerdDinners"
         connectionString="Server=localhost; Database=NerdDinners; Uid=root; Pwd=;"
         providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>
  <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, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

チュートリアルと同じように、EF4が自動的にデータベースを生成することを期待しています。代わりに、NerdDinnersデータベースが存在しないことを通知する内部例外を使用して、ProviderIncompatibleExceptionをスローします。

けっこうだ; 動作するかどうかを確認するためにMySqlデータベースを作成し、代わりに別のProviderIncompatibleExceptionを取得しました。今回は、「DatabaseExistsはプロバイダーによってサポートされていません」。

確かに、これは私がEntity Frameworkを実際に掘り下げているのは初めてであり(私は主にLinq to Sqlに固執しています)、これはすべて先週リリースされたCode-FirstCTPで実行されています。そうは言っても、私がここで間違っていること、または回避できる既知の問題はありますか?

4

3 に答える 3

26

そうです、ついにいくつかの興味深い点で機能するようになりました。

  • DBを作成できません。すでに存在している必要があります
  • デフォルトの名前だけでなく、DBContext名(上記の例では「NerdDinners」という名前の接続文字列が存在する必要があります)を使用して、DBコンテストごとに接続文字列を作成する必要があります(そうでない場合はSQLを使用します)
  • コンテキストをテーブルの名前として定義するために使用するDBSet名の名前が使用されるため、名前を付けるときは注意してください。

全体として、長い道のりですが、最終的にはそこにあります

**更新もう1つの注意点として、MySQLを使用してMVCサイトをデプロイする場合は、web.configにDataFactoryも追加する必要があります。通常、そこにあるMySqlコネクタとサポートされているMySQLのバージョンの違いが原因です。(多くの頭を悩ませた後、他の情報源から回答が見つかりました)追加するだけです:

  <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, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
  </system.data>

web.configとは別のセクションとして、サイトでデプロイするMySQL.Data.dllのバージョン番号を設定してください(互換性を確保するために、MySQLDLLを「ローカルとしてコピー」することもお勧めします。

于 2011-02-07T17:55:16.317 に答える
2

もう1つの興味深い点-「MySQLDataProvider」エントリをローカルのmachine.config(私の場合はC:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config)に追加すると、接続できますVisualStudioを介してMySqlインスタンスに...

于 2011-05-30T11:40:58.183 に答える
2

この質問と回答は、より大きなEFプロジェクトをSQLからmySQLに移行するのに非常に役立ちました。そのため、メモを追加して、それらが役立つことを願っています。

前述のように、接続文字列の名前は、System.Data.Entity.DbContextを拡張するクラスの名前と一致する必要があります。

mySQLコネクタを使用してEFでテーブルを作成する方法はまだないようですが、SQL作成スクリプトを使用および変更してmySQLテーブルを生成できます。これを行うために私が見つけた最も簡単な方法は、テーブルを再作成するためにコードが必要かどうかに応じて、拡張DbContextでOnModelCreating関数をコメントインおよびコメントアウトすることでした。これをより頻繁に行っていることがわかった場合は、依存性注入を使用してこれを解決し、mySQLまたはMSSQL構成に基づいて個別のクラスを作成する予定です。

webconfigのDbFactoryProvidersを混乱させるよりも、開発ボックスとサーバーに正しいmySQLコネクタ.dllがリリースにパッケージ化されていることを確認する方が簡単であることがわかりました。プロジェクト/ソリューションビルドパッケージでパッケージを正しく取得するということは、接続文字列の行だけが必要であり、多くのマシンで一貫して作業するのが難しいことがわかったDbFactoryProvidersの行は必要ないことを意味しました。

mySQL識別子の大文字と小文字の区別を0から1に変更する必要がありました。この設定がないと、固定大文字と小文字のテーブルと比較してオブジェクトの大文字と小文字が混在しているため、EFが接続したSQLはそこにあるテーブルを見つけることができませんでした。 mySQLが作成します。

于 2011-12-06T10:55:46.263 に答える