背景は次のとおりです。EF5を使用し、.NetFramework4.5を対象とした新しいWCFサービスを構築しました。私は既存の大規模なレガシーデータベースに対してコードファーストを使用しました。テストサーバー(したがって、同じビルドであるため本番サーバー)がFramework 4.5をサポートできないことを発見したときに、サービスをテストサーバーにデプロイするようになるまで、すべてがうまく機能していました。
そこで、Framework4.0をターゲットにするようにプロジェクトをダウングレードしました。すべてのエンティティマッピングを再コーディングした後(4.5に固有のDataAnnotations.Schema名前空間のコードを使用しないようにするため)、これをローカルで再び機能させました。ただし、サーバーにデプロイした後、ここで説明するエラーが発生しました。EF5ベータ版のテストでこのエラーが発生し続ける理由を誰かが見つけられますか。
提案どおりに実行した後(NuGetを介してEF5をアンインストールして再インストールした後)、サービスをテストしようとするとタイムアウトエラーが発生します。
具体的には、次のLinqを実行しようとするとタイムアウトが発生します。
var games = from m in _db.Members
join s in _db.UkSyndicates
on m.MemberId equals s.MemberId
where m.PaymentMethod == "Credit/Debit Card"
&& EntityFunctions.TruncateTime(s.NextChargeDate) <= EntityFunctions.TruncateTime(DateTime.Now)
&& !string.IsNullOrEmpty(m.AibCustomerReference)
&& (m.StatusId == 105 || m.StatusId == 113)
select new BillingItem
{
Id = s.Id,
SyndicateId = s.SyndicateId,
MemberId = s.MemberId,
LastDrawId = s.LastDrawId,
LastPaidGame = s.LastPaidGame,
NextChargeDate = s.NextChargeDate,
Protected = s.Protected,
PaymentFrequency = (int)(s.PaymentFrequency*4),
CurrencyCode = m.CurrencyCode,
AibCustomerReference = m.AibCustomerReference,
WeeklyFee = (from f in _db.GameFees where f.FeeName == "UK_LOTTO_FEE" && f.CurrencyCode == m.CurrencyCode select f.Amount).FirstOrDefault(),
GameCode = game,
PostCode = m.PostCode,
CountryCode = m.CountryCode,
EmailAddress = m.Email
};
このクエリを作成するためのより効率的な方法があるかもしれません-私はLinqとEFにかなり不慣れですが、EFのアンインストールと再インストールの前にこれがタイムアウトしなかったことを強調します。実際、データはかなり迅速に返されました。
EFの再インストール後にこれがタイムアウトする理由はわかりません。コードには何も変更されていませんが、これに対する解決策が必要です。
ありがとう。
発生しているエラーを明確にするために、EFが上記のクエリを実行しようとした時点で、EntityCommandExecutionExceptionがスローされます。例外メッセージは、「コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。」です。内部例外は、「タイムアウトが期限切れです。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。」です。
スタックトレースは次のとおりです。
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand、CommandBehavior Behavior)at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType](ObjectContext context、ObjectParameterCollection parameterValues)at System.Data.Objects.ObjectQuery 1.GetResults(Nullable
1 forMergeOption) System.Data.Objects.ObjectQueryで1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Data.Entity.Internal.Linq.InternalQuery
1.GetEnumerator()でSystem.Data.Entity.Infrastructure.DbQueryで1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
at RepeatBillingService.Repositories.BillingRepository.GetMembersForGame(String game, List
1&billingQ)in p:\ Projects \ BigFatLottos \ RepeatBillingService \ RepeatBillingService \ Repositories \ BillingRepository.cs:line 441 at RepeatBillingService.Repositories.BillingRepository.GetMemberGamesForBilling()in p:\ Projects \ BigFatLottos \ Repeat :p:\ Projects \ BigFatLottos \ RepeatBillingService \ RepeatBillingService \ RepeatBillingService.svc.cs:Line 51 at SyncInvokeRunRepeatBilling(Object、Object []、Object [])のRepeatBillingService.RepeatBillingService.RunRepeatBilling()の24行目System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&rpc)の.SyncMethodInvoker.Invoke(Object instance、Object [] input、Object []&outputs)