簡単なクエリを作成し、ビューとして保存しました (以下を参照)。SSMS でクエリを実行すると、30 行が返され、正しいです。Entity Frameworkで設定すると(ウィザードをずっと使用して... 3回実行しました...)、結果のグリッドビューで少なくとも1行が数回複製されます。合計で 30 行が表示されますが、多くはダップであり、他は欠落しています。1 行が 9 回複製されます。
EF にアーティファクトが残っていないことを確認するために、以下のスクリプトを使用して新しい名前でビューを再作成しました (3 つは実際には 2 つの動作不良です)。新しいデータソースと「autogenerate = true」をオンにしたほぼ完全にバニラのデータグリッドを備えたバージンasp.netページを使用したため、何も制御しませんでした。それが役立つ場合は、マークアップを表示できます。生成されたマークアップにはすべての重複が含まれているため、クライアントのレンダリングの問題ではありません。
Linq to SQL などを使用して EF をループから外す必要があるかもしれませんが、方法がわかりません。これを投稿したらやってみます。ありがとう....
[編集 -- データソースを SQLDataSource に変更したところ、完全に機能しました。まさに正解!】
USE [CPAS];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE VIEW dbo.tstTimesheetSummarybyWorkerDiscipline
AS SELECT dbo.tblTimesheetDetail.TimesheetID ,
dbo.tblWorkers.WorkerName AS [Worker Name] ,
dbo.tblStaffAugLaborRates.TradeType AS [Trade Type] ,
SUM( dbo.tblTimesheetDetail.TSDStdHrs
)AS [Regular Hours] ,
SUM( dbo.tblTimesheetDetail.TSDOTHrs
)AS [Overtime Hours] ,
SUM( dbo.tblTimesheetDetail.TSDDTHrs
)AS [Doubletime Hours] ,
SUM( dbo.tblTimesheetDetail.TSDStdHrs + dbo.tblTimesheetDetail.TSDOTHrs + dbo.tblTimesheetDetail.TSDDTHrs
)AS [Tot Hrs] ,
SUM( dbo.tblTimesheetDetail.TSDMiscAmt
)AS [Expense Amt] ,
COUNT( *
)AS [Timesheet Count]
FROM
dbo.tblTimesheetDetail INNER JOIN dbo.tblWorkers
ON dbo.tblTimesheetDetail.TSDWorkerID
=
dbo.tblWorkers.ID
INNER JOIN dbo.tblStaffAugLaborRates
ON dbo.tblTimesheetDetail.TSDLaborRateID
=
dbo.tblStaffAugLaborRates.ID
GROUP BY dbo.tblTimesheetDetail.TimesheetID ,
dbo.tblWorkers.WorkerName ,
dbo.tblStaffAugLaborRates.TradeType;
GO