したがって、私の ASP.NET MVC4 アプリは EF を使用します。私の特定の状況では、ロジックの一部を SQL ビューに実装し、残りを EF に実装することにしました。これは、以前に使用して成功したアプローチです。可能な限り EF を使用しますが、EF よりも TSQL の方が簡単に見えるロジックのビューで TSQL を使用します。これが私のTSQLビューです:
SELECT P.DeviceID, P.PhoneNumber, E.FullName, Effective
FROM PhoneNumbers P
INNER JOIN Devices D ON D .DeviceID = P.DeviceID
LEFT OUTER JOIN vEmployees E ON P.AssignedEmployeeNumber = E.EmployeeID
UNION
SELECT H.DeviceID, H.PhoneNumber, E.FullName, MIN(Effective) AS Effective
FROM PhoneNumberHistory H
INNER JOIN Devices D ON D .DeviceID = H.DeviceID
LEFT OUTER JOIN vEmployees E ON H.AssignedEmployeeNumber = E.EmployeeID
GROUP BY H.DeviceID, H.PhoneNumber, E.FullName
また、EF を呼び出しているサービス コードではあまり処理が行われていません。
return this.deviceHistoryRepository.GetMany(d => d.DeviceID == id)
.OrderByDescending(d => d.Effective).ToList();
単純に、SQL から直接ビューを実行した場合 (もちろん、DeviceID を指定するために WHERE 句を使用)、および EF への呼び出しを介して同じデータが返されることを期待します。しかし、代わりに、EF の結果には行が欠落しており、行が重複しています。足りないものはありますか?EF が TSQL を正しく使用できるように、ビューの TSQL に追加できるものはありますか?