更改目标框架版本并重新安装EF后,实体框架5命令超时错误

时间:2012-10-13 18:32:39

标签: wcf entity-framework code-first

以下是背景:我构建了一个使用EF5的新WCF服务,目标是.Net Framework 4.5。我已经使用代码优先于现有的大型遗留数据库。所有这些工作都很顺利,直到我将服务部署到测试服务器,当我发现测试服务器(因此生产服务器,因为它们是相同的构建)不能支持Framework 4.5时。

因此,我将该项目降级为目标框架4.0。重新编码我的所有实体映射(为了避免使用特定于4.5的DataAnnotations.Schema命名空间中的代码),我在本地再次使用它。但是,在部署到服务器后,我遇到了此处描述的错误:Can anyone spot why I keep getting this error testing the EF 5 beta

按照建议 - 按照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 。异常消息是“执行命令定义时发生错误。有关详细信息,请参阅内部异常。”内部异常是“超时已过期。在操作完成之前已经过了超时时间,或者服务器没有响应。”

堆栈跟踪如下:

at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)    at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType](ObjectContext context,ObjectParameterCollection parameterValues)    在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&amp; billingQ)在p:\ Projects \ BigFatLottos \ RepeatBillingService \ RepeatBillingService \ Repositories \ BillingRepository.cs:第441行    位于p:\ Projects \ BigFatLottos \ RepeatBillingService \ RepeatBillingService \ Repositories \ BillingRepository.cs中的RepeatBillingService.Repositories.BillingRepository.GetMemberGamesForBilling():第24行    在p:\ Projects \ BigFatLottos \ RepeatBillingService \ RepeatBillingService \ RepeatBillingService.svc.cs中的RepeatBillingService.RepeatBillingService.RunRepeatBilling():第51行    在SyncInvokeRunRepeatBilling(Object,Object [],Object [])    在System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象实例,对象[]输入,对象[]和输出)    在System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)

1 个答案:

答案 0 :(得分:1)

我深究这一点,并道歉,因为整个问题有点像红鲱鱼。我在后台打开了一个SSMS会话,我在调整数据进行测试,并且一直在更新“NextChargeDate”值。当我关闭会话时,我得到“有未提交的交易,你现在想要提交”,这开始响起警钟。

在重启WCF服务的时候,一切都运转良好。所以我的超时发生是因为数据库中该字段的未提交更新 - 在提交更新之前,EF显然无法成功读取数据。

所以我很抱歉浪费你的时间来处理这个问题,只是在一个简单的监督下,长时间在压力下工作以获得一个新的系统。

非常感谢您的回复。