SQL Server视图在Entity Framework中返回不同的结果

J K*_*ing 7 .net vb.net entity-framework sql-view entity-framework-6

我在SQl服务器中有一个sql视图:

SELECT        dbo.job.idJob, SUM(dbo.tracking.iQty) AS TotalOrdered, dbo.tracking.idProduct
FROM            dbo.tracking INNER JOIN
                         dbo.job ON dbo.tracking.idJob = dbo.job.idJob
GROUP BY dbo.tracking.idAction, dbo.tracking.idProduct, dbo.job.idJob
Run Code Online (Sandbox Code Playgroud)

在SQL Server中它返回:

idJob       TotalOrdered idProduct
----------- ------------ -----------
5000        150          9
5000        75           18
5006        20           3
Run Code Online (Sandbox Code Playgroud)

问题:

当我通过WPF 4.5项目中的Entity Framework 6访问此视图时,它返回不同的结果.我将视图添加到edmx文件,然后以下列方式调用视图:

Public Function GetTracking_Ordered(idJob As Integer) As Collection(Of vw_Tracking_Ordered) Implements ITrackingDataService.GetTracking_Ordered
            Try
                Using context = _ModelService.NewContext

                    Dim trackingList = (From recs In context.vw_Tracking_Ordered Where recs.idJob = idJob Select recs).ToList
                    Return New Collection(Of vw_Tracking_Ordered)(trackingList)

                End Using
            Catch ex As Exception
                Return Nothing
            End Try
        End Function
Run Code Online (Sandbox Code Playgroud)

以下是结果:

idJob       TotalOrdered idProduct
----------- ------------ -----------
5000        150          9
5000        75           9
5006        20           3
Run Code Online (Sandbox Code Playgroud)

注意5000作业的idProduct现在都是9而不是9和18.

题:

任何人都可以帮我调试为什么这个结果从SQL服务器变为实体框架?

谢谢,谢谢

Vla*_*and 8

请确保您View的在.edmx文件中有一个主键分配.如果没有,请entity key使用edmx设计器自行添加.我这个情况下,你可能要包括列idJob,并idProduct在你的实体键.

另请阅读:http://msdn.microsoft.com/en-us/library/vstudio/dd163156(v = vs.100).aspx

  • 我不确定,它也发生在我身上,而且非常讨厌.我认为**你从视图中真正返回的是一组独特的`idJob + idProduct`.并且使用错误的实体键(仅限`jobId`),`EF`无法正确返回其他字段,例如`idProduct`.看起来他正在第一次出现你的`idProduct`,为每一份工作重复它.对我来说奇怪的是,"TotalOrdered"看起来很好...... (2认同)