2

私のASP.NETMVCWebApiプロジェクトには、単純なLinq SingleOrDefaultコマンドを介してDBにクエリを実行し、すべてをコントローラーに出力するリポジトリ(インターフェイス付き)があります。(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

参考:クエリを直接コントローラに入力しても機能しません。

MVCビューで遅延読み込み機能を使用したいので、誰かがこの問題について知っていて、私を助けてくれるとありがたいです。

db.ContextOptions.LazyLoadingEnabled = FalseMomentの回避策は、WebApiを介した呼び出しの遅延読み込みをオフ( )にすることです...

4

1 に答える 1

1

あなたが説明する動作を考えると、遅延読み込みが(何らかの理由で)データベースからの大量のデータの読み込みを引き起こしていると思われます。これには時間がかかり、応答がないように見えます。遅延読み込みをオフにすると、コレクションプロパティを設定せずに、クエリの最初の「レベル」のみが返されます。

これらの呼び出しがWebAPIに対するものである場合、遅延読み込みから実際のメリットが得られるかどうかはわかりません。API呼び出しは、データベースにクエリを実行し、厳密に定義された結果セットを返す方法において、非常に決定論的である必要があります。パフォーマンスの高いAPIを作成するのは難しく(StackOverlowチームに聞いてください!)、クエリのパフォーマンスは非常に重要です。

于 2012-08-22T14:48:10.300 に答える