MySQL + .NETでうんたら

久々に嵌り。

現象は、ADO.NETのEntityModelをリバースで作成し、Linq掛けると、フェッチされずにぬるぽ。

解せないのが、UnitTestプロセスでは例外が発生せずに、本プロセスで発生。
そこの差分を調べたけど、どうにもこうにも腑に落ちない。

UnitTestでは以下の通りに、MySql.Data.Entity.dllのロードに成功
--
'QTAgent.exe' (マネージ (v4.0.30319)): 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\MySql.Data.Entity.dll' が読み込まれました
--

本プロセスでは、Sytem.Data.Entity内でMySql.Data.Entity.dllをロードするところで落ちている。
--
'System.NullReferenceException' の初回例外が System.Data.Entity.dll で発生しました。
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>ハンドルされていない例外</Description><AppDomain>ConsoleTradeConverter.vshost.exe</AppDomain><Exception><ExceptionType>System.NullReferenceException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>オブジェクト参照がオブジェクト インスタンスに設定されていません。</Message>
<StackTrace>  
   場所 MySql.Data.MySqlClient.MySqlClientFactory.get_MySqlDbProviderServicesInstance()
   場所 MySql.Data.MySqlClient.MySqlClientFactory.System.IServiceProvider.GetService(Type serviceType)
--

色々と試し過ぎて吐きそうになったので、結論から。

全く解決していないけど、落ちなくなる方法は、本アプリでMySql.Data.Entity.dllを参照に加え、それもビルド時にコピーを有効にしておく。

単純にロード対象のアセンブリ検索で何かしらバグっているとしか思えないけど、致し方ない。

UnitTest側ではこんなことしていないけど、あれはテストフレームワークが読み込むライブラリだから、ちょっと事情は違うんだけどね。