0

EF が間違ったデータを送り返すという非常に深刻な問題があります。管理スタジオで同じテーブルに対して同じクエリを実行し、まったく異なる結果を得ることができるため、それが間違っていることはわかっています。

問題を調査したところ、次のように追加することで問題を解決できる人がいることがわかりました。

*DbContextSummary.Refresh(RefreshMode.StoreWins, result);*

それを追加しようとすると、次のエラーが発生します。

更新するオブジェクトのコレクション内のインデックス 0 の要素の EntityKey プロパティ値が null であるか、この ObjectStateManager に関連付けられていません。

そのエラーが発生した後、次のことを試みました: DbContextSummary.Attach(result) そして、別のエラーを受け取りました。

適切な解決策は何ですか?なぜこれが起こるのですか?

関連コード (更新呼び出しなし):

Private _dbContextSummary As BudgetEntities

     Public ReadOnly Property DbContextSummary() As BudgetEntities
            Get
                If _dbContextSummary Is Nothing Then
                    _dbContextSummary = New BudgetEntities
                End If
                Return _dbContextSummary
            End Get
        End Property

     <WebMethod()> _
        Public Function GetSummaryData(ByVal month As String, ByVal year As String, ByVal expenseLine As String, ByVal organization As String) As List(Of SummaryModel)
            Dim result As List(Of SummaryModel) = Nothing

result = (From s In DbContextSummary.FPRs _
                    Where s.FY = year _
                    Where s.Month = month _
                    Where s.FPRLine = expenseLine _
                    Where s.VP = organization
                    Group s By s.MgrID, s.ProgAdm, s.FinanceNumber, s.FinanceNumberName Into g = Group _
                    Order By g.FirstOrDefault.MgrLastName, g.FirstOrDefault.ProgAdm Ascending
                    Select New SummaryModel With { _
                        .Actual = g.Sum(Function(a) a.Actual), _
                        .Plan = g.Sum(Function(p) p.Plan), _
                        .YTDActual = g.Sum(Function(ya) ya.YTDActual), _
                        .YTDPlan = g.Sum(Function(yp) yp.YTDPlan), _
                        .FinanceNumber = g.FirstOrDefault.FinanceNumber, _
                        .FinanceNumberName = g.FirstOrDefault.FinanceNumberName, _
                        .MgrLastName = g.FirstOrDefault.MgrLastName + ", " + g.FirstOrDefault.MgrFirstName, _
                        .PlanYearTotal = g.FirstOrDefault.PlanYearTotal, _
                        .ProgAdm = g.FirstOrDefault.ProgAdm _
                        }).ToList()
Return result
    End Function
4

1 に答える 1

1

適切な解決策は何ですか?なぜこれが起こるのですか?

簡単に言えば、あなたのシナリオには適切な解決策がありません。エンティティではない型 ( ) へRefreshの射影 ( ) を実行した後は、 はまったく適用できません。あなたのコレクションにはエンティティは含まれていませんが、. このコレクションまたはその要素には適用できません。どちらのメソッドも、モデル エンティティを操作することを目的としています。つまり、既にアタッチされているエンティティのプロパティをデータ ストアから更新し、state のコンテキストにエンティティを追加します。select newSummaryModelresultSummaryModelRefreshAttachRefreshAttachUnchanged

新しい質問を開いて、「 EF が間違ったデータを送り返している」と思う理由を説明し、この問題を解決することをお勧めします。読み込みによって間違った結果が返された場合、再読み込みによって正しいデータが提供される可能性はほとんどありません。

于 2013-06-26T19:59:47.870 に答える