最近修正されたバグの多くは、エンティティフレームワークを使用してロードされたオブジェクトのナビゲーションプロパティにアクセスするときにnull参照の結果になります。私は自分の方法をどのように設計しているのかには欠陥がなければならないと確信しています。ここに例があります...EFナビゲーションプロパティへのアクセス時にNullReferenceExceptionを避ける
タスクには多くの役割が含まれており、各役割はユーザーを参照しています。
私はユーザーを誤ってこの ように私の状況を照会し、ロードしていないだろうことを考えるとpublic class Role
{
public int Id;
public int User_Id;
public string Type;
}
public class User
{
public int Id
public string Name;
}
public class Task
{
public int Id;
public string Name;
public string Status;
public List<Role> Roles;
}
...
var task = context.Tasks.Include(x=>x.Roles).FirstOrDefault;
そして私は、このメソッドを呼び出す...
public void PrintTask(Task task)
{
Console.WriteLine(task.Name);
Console.WriteLine(task.Status);
foreach(var r in task.Roles)
{
Console.WriteLine(r.User.Name); //This will throw NRE because User wasn't loaded
}
}
私はこのメソッドをRolesとUserを読み込むつもりで構築しているかもしれませんが、次に私が使用するときには両方が必要であることを忘れるかもしれません。理想的には、メソッド定義で必要なデータがわかるはずですが、タスクとロールの両方を渡しても、私はまだロール - >ユーザーがいません。
これらの関係を参照する適切な方法と、この印刷方法のようなものに読み込まれていることを確認してください。私はより良いデザインに興味があるので、 "Use Lazy Loading"は私が探している答えではありません。
ありがとうございます!
編集:私は、私はこのようなタスクをロードすることができます知っている
...
私が知りたいのは何var task = context.Tasks.Include(x=>x.Roles.Select(z=>z.User)).FirstOrDefault();
私は戻ってきたときに、それを使用するように私は私の方法を設計行う方法です6ヶ月後に私のエンティティにどのデータをロードする必要があるのか分かりますか?メソッド定義は、それを使用するのに必要なものを示していません。または、これらのNullReferenceに対してブロックする方法。より良いデザインが必要です。
[の可能な重複を.NETでのNullReferenceExceptionとは何ですか?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) –
これは、他の 'NullReferenceException'問題と同じです。 –