EF6 に更新したばかりで、以前のバージョンと比較して動作がおかしいという問題があります。
プロパティが null 許容の場合、EF は Include ステートメントの LEFT JOIN を生成していました。ただし、このバージョンでは [required] 属性も考慮されているようです。
たとえば、次のクラスがあります。
public class Client
{
[DisplayName("Industry Code")]
[Required]
public int? IndustryId { get; set; }
[ForeignKey("IndustryId")]
public Industry IndustryEntity { get; set; }
}
私たちがするとき
return db.Clients
.Include(o => o.CountryISOEntity)
....
.Include(o => o.IndustryEntity)
.Single(o => o.Id == clientId);
以前のバージョンでは LEFT OUTER JOIN が生成されましたが、新しいバージョンでは INNER JOIN が生成されます。
[required] 属性を削除すると、LEFT JOIN が生成されます。ただし、この属性を使用してユーザーにエラーを表示するため、私の場合はオプションではありませんが、ユーザーには不完全なエンティティを保存して後で戻るオプションがあります。そして、ユーザーが戻ってくると、インクルードが INNER JOIN を生成するため、レコードが存在しないというエラーが発生します。
新しい EF6 には、この動作を無効にし (属性を無視する)、null 許容情報に基づいて SQL クエリを生成する設定はありますか? または、インクルードで LEFT JOIN を強制できますか? それとも、以前の EF バージョンにロールバックする唯一のオプションですか?
PS: .Net 4.0 を使用しています
ありがとう