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