Entity Framework を使い始めたところ、問題が発生しました。
データベースに 2 つのテーブルがあるとします。ID とパスワードを含む Agent と呼ばれるテーブルと、エージェントに関する詳細情報を含む AgentDetail と呼ばれる別のテーブルです。ただし、すべての Agent レコードに対応する AgentDetail レコードが存在しない場合があります。
これらの 2 つのテーブルを表すこれらの 2 つのクラスがあります。
public class Agent
{
public string AgentId { get; set; }
public string Password { get; set; }
public virtual AgentDetail AgentDetail { get; set; }
}
public class AgentDetail
{
public string AgentDetailId { get; set; }
public string AgentName { get; set; }
public string Postcode { get; set; }
}
EF を使用すると、データベースにデータを追加できます。両方のテーブルに対応するレコードがあれば、データを取得することもできます。
var agents = from a in context.Agents
select a;
return View(agents.ToList());
ただし、そのレコードが AgentDetail テーブルに存在しない場合、AgentDetail 内の値をレンダリングすると、ビューで NullReferenceException が発生します。
AgentDetail レコードがないため、これは当然のことです。
私の質問は、テーブルにレコードが存在しない場合に、空の値を持つ AgentDetail を作成するように EF を取得する方法です。
LINQ クエリに空の子オブジェクトを追加できますか?
var agents = (from a in rb.Agents
select new
{
AgentId = a.AgentId,
Password = a.Password,
AgentDetail = a.AgentDetail == null ? new AgentDetail() : a.AgentDetail,
}).ToList();
(ただし、次のメッセージが表示されるため、上記は機能しません:
エンティティまたは複合型 'Models.AgentDetail' は、LINQ to Entities クエリでは構築できません)。