在我的ASP.NET MVC WebApi项目中,我有一个存储库(带有接口),它通过一个简单的Linq SingleOrDefault命令查询DB,然后将所有内容输出给Controller。(EF =数据库优先针对Oracle DB)
问题是,当我打开延迟加载(通过EDMX文件属性)时,get将永远加载,并且没有响应。如果我关掉拉兹装的话一切都还好吗?
更奇怪的是,当我将所有查询放入控制台应用程序并通过Console.WriteLine输出所有内容时,它也适用于延迟加载吗?
接口:
Public Interface IMedienRepository
Function [Get](id As Integer) As MEDIEN
End Interface
仓库
Private db As EFEntities
Public Sub New()
db = New EFEntities
End Sub
Public Function [Get](id As Integer) As MEDIEN Implements IMedienRepository.[Get]
Dim _medien = db.MEDIEN.SingleOrDefault(Function(m) m.MEDIENNR = id)
If _medien Is Nothing Then
Throw New NotFoundException()
End If
Return _medien.SingleOrDefault()
End Function
控制器
Private _repository As IMedienRepository
Public Sub New()
Me.New(New MedienRepository())
End Sub
Public Sub New(repository As IMedienRepository)
_repository = repository
End Sub
Public Function GetValue(id As Integer) As MEDIEN
Try
Return _repository.Get(id)
Catch generatedExceptionName As NotFoundException
Throw New HttpResponseException(New HttpResponseMessage() With { _
.StatusCode = System.Net.HttpStatusCode.NotFound _
})
End Try
End Function
FYI:即使我将查询直接放入控制器,它也无法工作!
如果有人知道这个问题,并能帮助我,我将不胜感激,因为我喜欢在MVC视图中使用延迟加载功能。
我目前的工作是关闭通过WebApi进行呼叫的延迟加载(WebApi).
发布于 2012-08-22 06:48:10
考虑到您描述的行为,我怀疑延迟加载会导致(出于某种原因)从数据库加载大量数据,这需要很长时间,而且看起来没有响应。关闭延迟加载确保只返回查询的第一个“级别”,而不填充任何集合属性。
如果这些调用是针对WebAPI的,我不确定您是否会从延迟加载中获得真正的好处。API调用在查询数据库和返回严格定义的结果集时应该非常确定。编写性能良好的API很难(只需问问StackOverlow团队!)查询性能是至关重要的。
https://stackoverflow.com/questions/12075410
复制