2011-08-17 15 views
2

私はEntity FrameworkをMySQLで使用していますが、すべてのテーブルにはCHAR(36)型のID列があります。 EDMXファイルでは、彼らは、タイプ可能System.Guidの全てであり、SSDL XMLは次のようになります。シーケンスには、Guidと述語をMySql.Data.Entityと比較するときに要素が含まれません。

<EntityType Name="Accounts"> 
    <Key> 
    <PropertyRef Name="ID" /> 
    </Key> 
    <Property Name="ID" Type="guid" Nullable="false" /> 
    ... 

私は(シングル、どこで、どれ、など)のいずれかの方法を使用しようとすると、それがあることを知らせると、InvalidOperationExceptionがスローされますシーケンスには要素が含まれていません。奇妙な部分は、デバッガの結果ビューを展開すると、要素が表示されます。 GUID値は同じであるため、正確に1つの要素を返す必要があります。私は以下の写真を含んでいます(より大きなものを見るために右クリックして保存してください)が、誰でもここで何が起こっているのか説明できますか? GUIDの行う試合:

(method argument) accountID: 
{7767402f-9b29-4026-b40d-6eb991748f8c} 
(should match) element in results view: 
{7767402f-9b29-4026-b40d-6eb991748f8c} 

enter image description here

+0

は(SingleOrDefault 'に切り替えてみてください)'と 'null'なのでためのチェック' account'。次の行に移動し、accountがnullの場合、GUIDは一致しません。 –

+0

これはこの問題とは関係ありません。もちろん、述語が失敗するため、nullを返すことになります。 ObjectSetには一致するIDを持つアカウントが1つしかない2つの結果が含まれているため、問題はありません。ここでの問題は、述語がこれに失敗している理由です。このアプリケーションはMSSQLとMySQLの両方をサポートするように構築されており、MSSQLに設定されている場合、コードは適切に動作します。それはMySql固有のものですが、なぜそれが失敗しているのか分かりません。画像を見ると、一致する結果セットが表示されます。 –

答えて

0

私の賭けは、MySQLのコネクタにバグだとそれはGUIDがDBに格納されてどのように関係しているということです。何らかの理由で比較がうまくいかない。私はCHAR(36)の代わりにBINARY(16)を使うべきだと思います。

チェックアウトこの質問への答え:Storing MySQL GUID/UUIDs

+0

実際には十分な資料がありませんが、それはコネクタに問題があります。 –

関連する問題