2012-02-20 20 views
1

小さなプロジェクトにMySql Entity Frameworkプロバイダを使用しようとしています。 MySql Connector(DevArtではなく、MySQLで開発されたもの)を使って作業するとき、私はいつも「癖」に遭遇しました。MySql Entity Frameworkデータベースファースト - 主キー=ロング?

私が見つけた最新のものは、データベースから生成された私のエンティティは、データベースのタイプが符号付き整数、自動増加、PRIMARY KEYとして指定されているにもかかわらず、自分のIDフィールドのためのlong代わりのintを得ているということでした。

LAST_INSERT_ID()は常にlongを返します。私のエンティティはID値を作成するためにデータベースに依存しているので、おそらくMySQL ConnectorはIDのlongを挿入後にid取得に対応させるでしょうか?

私が遭遇したすべての問題の最も簡単な回避策は、SQL Serverを使用することです。しかし、このアプリのターゲットは共有ホスティングです。 SQL Serverアドオンを支払っても、ほとんどの共有ホストはSQL Serverインスタンスを200MBに制限し、1または2のデータベースのみを許可します。それは私の意見ではあまりにも小さいです。同じホストがいくつかの1GB MySQLデータベースを無料で提供しています。あなたがそれを超えるなら、おそらく専用ボックスを持っているはずです。

答えて

1

MySQLは常に32ビットのintではなく64ビットのint(またはBIGINT)を返します。だからあなたはintの代わりにlongを得ているのです。

http://bugs.mysql.com/bug.php?id=64084、およびLAST_INSERT_ID()のMySQLマニュアル:http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-idを参照してください。

+0

:)私のバグレポート。 – Sam

+0

私はちょうどそれがこのように動作することに驚いています。どうにかして、MySQL Administrator/Workbenchは自分の鍵を整数として定義したことを覚えています。コネクタは同じメタデータにアクセスしませんか? – Sam

+1

私はあなたが驚いています。コネクターがデータベース/モデルで定義したものとは異なる値を戻すのは論理的ではありません。コネクターを開発した人は、たった一つの戻り値の型を選択した可能性があります。 – WimB