1

遅延読み込みでエンティティ フレームワークを使用する - エンティティが null の場合の関連エンティティの読み込みについて、次の質問をしてください。

employee と employeedetails の 2 つのテーブルがあるとします。上記のケースで、すべての従業員エントリが employeedetails テーブルにエントリを持っているわけではないと仮定します。従業員のリストを調べたい場合

(from e in objectcontext.employees                                  
                              select new EmployeeEntity
                              {
                                  EmpID= e.EmployeeID,
                                  FirstName = e.FirstName,
                                  Address = e.employeedetails.Address
                              }).ToList();

EmployeeEntity は、結果を詰め込むデータ クラスです。

上記のコードは、返されたリストの従業員が 1 人でもテーブル employeedetails にエントリを持っていない場合に壊れます。詳細エントリがない顧客の場合、 e.employeedetails は null になるため、これは明らかです。

上記のクエリを書き直す最良の方法は何ですか?

このようなものは受け入れられますか?

(from e in objectcontext.employees                                  
                              select new EmployeeEntity
                              {
                                  EmpID= e.EmployeeID,
                                  FirstName = e.FirstName,
     Address = e.employeedetails  == null ? "" :    e.employeedetails.Address,
                              }).ToList();

この上記のクエリの効率については明確ではありません-このステートメントはDBレベルでnullチェックを行いますか?

代わりに、次のような明示的なインクルードを行う必要があります

objectcontext.include("employeedetails")...

そして、結果をループして null をチェックしますか?

4

1 に答える 1

1

はい、このステートメントは、生成された SQL クエリで実際に null チェックを実行します。ほとんどの場合、単にNVLまたはになりCOALESCEます。

それがあなたがやるべき方法です。

于 2012-08-27T12:52:00.767 に答える