在对SQL Azure的Azure的辅助角色使用EF5代码先用统一的IoC当“基础提供失败的打开”错

2019-10-18 08:24发布

我使用实体框架5代码首先,我用工作模式的存储库和单位,并有我的域模型,存储库和服务层中的Windows Azure云服务中运行的MVC应用程序内的精细工作。 我使用统一为IOC和注入储存库,控制器,和根据需要的服务等级,并且使用每个请求的寿命。 据伟大的工作。

然而,当我使用的域名,仓库和EF5的DbContext,在Azure中Worker角色相同的代码/类库,指向同一个SQL Azure数据库为MVC应用程序,我得到奇怪的错误,我不明白从MVC应用程序。 需要注意的是,在这一点上,我只是做读取(选择),没有更新的交易。 下面的错误信息似乎暗示,它无法打开连接。

在辅助角色,我有一个引导程序静态类建立的容器中,它注册的所有服务。 在辅助角色的启动我必须做一些工作,所以我把引导程序以注册服务,那么我解决他们夫妇立即使用。 这些服务得到注射库,这又与我的DbContext得到注入,全部由IoC容器建立。 对于的DbContext,我在IoC容器中使用统一的HierarchicalLifeTimeManager。

当我的服务类尝试在运行辅助角色从数据库中读取数据,它就会出现以下错误:

The underlying provider failed on Open.    at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
   at System.Data.EntityClient.EntityConnection.Open()
   at System.Data.Objects.ObjectContext.EnsureConnection()
   at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at MyApp.Persistence.EF.RepositoryBase`1.Find(Expression`1 where, Expression`1[] includeProperties)

此完全相同的方法调用已经从MVC应用程序做工精细。 我想有一些错误的DbContext的辅助角色,或许与国际奥委会的寿命范围,但是这只是猜想。

没有人有任何想法可能是什么此异常的原因是什么? 任何使用EF,国际奥委会,回购/ UOW和Azure的辅助角色? 建议?

Answer 1:

由于阿瑟·维克斯谁对我的问题的评论,我会继续前进,这粉笔在多达由于Azure的SQL数据库连接的瞬时错误。 我从来没有能够充分证明了这一点,但是,我提出了在Azure上一个SQL VM和创建我的数据库有再改变了我的云服务应用程序指向该数据块而不是。

被监测的日志,并没有看到同样的问题还...

一个潜在的选择,如果我回到Azure的SQL数据库是使用瞬态故障处理块从微软P&P推出自己的重试逻辑,或者使用一个项目像罗布·摩尔的ReliableDbProvider( https://github.com/robdmoore/ReliableDbProvider )。

当EF6出来的时候,我会考虑使用内置的功能,瞬时误差。

希望这可以帮助别人。



文章来源: “The underlying provider failed on Open” Error when using EF5 Code First with Unity IoC in Azure Worker Role against SQL Azure