1つのWebアプリケーションで私はこれを使用しています:-
using (MvcApplication1.Models.PlumSoftwareEntities db = new Models.PlumSoftwareEntities())
{
var results = (from p in db.Work_Details
where p.CompanyID == 2
select new { p.ID, p.Dated, p.Employee1.Abbrev, p.Activity.ActivityCode }).ToList();
}
そして、それはこのSQLを生成します:-
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Dated] AS [Dated],
[Extent2].[Abbrev] AS [Abbrev],
[Extent3].[ActivityCode] AS [ActivityCode]
FROM [dbo].[Work Details] AS [Extent1]
INNER JOIN [dbo].[Employees] AS [Extent2] ON [Extent1].[Employee] = [Extent2].[ID]
INNER JOIN [dbo].[Activity] AS [Extent3] ON [Extent1].[ActivityCodeID] = [Extent3].ActivityCodeID]
WHERE 2 = [Extent1].[CompanyID]
別のWebアプリケーションでは、次のSQLを生成することを除いて、上記とまったく同じlinqを使用します:-
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Dated] AS [Dated],
[Extent2].[Abbrev] AS [Abbrev],
[Extent3].[ActivityCode] AS [ActivityCode]
FROM [dbo].[Work Details] AS [Extent1]
INNER JOIN [dbo].[Employees] AS [Extent2] ON [Extent1].[Employee] = [Extent2].[ID]
LEFT OUTER JOIN [dbo].[Activity] AS [Extent3] ON [Extent1].[ActivityCodeID] = [Extent3].ActivityCodeID]
WHERE 2 = [Extent1].[CompanyID]
最後のナビゲーション プロパティが LEFT OUTER JOIN になりました
この動作にはどのような設定、説明がありますか。
接続文字列は同じで、同じ SQL サーバーに対して、同じログインで、両方のアプリケーションで同じ Entity Framework 5 を使用し、どちらも ASP.NET 4.5 を実行しています。
これは単純な例であり、左外部結合について私にとって重要な理由は、SQlDependency を使用してこれらのクエリをキャッシュするナビゲーション プロパティを使用してエンティティ テーブルを DTO オブジェクトに投影しているためです。SQLDependency では、すべてのビューで INNER JOINS を使用する必要があります。そうしないと、エラーがスローされます。