0

我对 EF 发回错误数据有一个非常严重的问题。我知道这是错误的,因为我可以在管理工作室中对同一张表运行相同的查询并获得完全不同的结果。

我确实研究了这个问题,发现有些人能够通过添加以下内容来解决这个问题:

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

当我尝试添加时,我收到此错误:

要刷新的对象集合中索引 0 处的元素具有空 EntityKey 属性值或未附加到此 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执行投影 ( ) 后,它根本不适用。您的集合不包含实体,但s。您既不能应用也不能应用于此集合或其元素。这两种方法都适用于模型实体:从数据存储中更新已附加实体的属性,并将实体添加到 state 中的上下文中。select newSummaryModelresultSummaryModelRefreshAttachRefreshAttachUnchanged

我建议您打开一个新问题并描述为什么您认为“ EF 发送回了错误的数据”并尝试解决问题。当加载提供错误结果时,重新加载不太可能提供正确的数据。

于 2013-06-26T19:59:47.870 回答