Многие из ошибок, которые я исправляю в последнее время, являются результатом нулевых ссылок при доступе к свойствам навигации объектов, загружаемых с использованием сущности. Я считаю, что должен быть недостаток в том, как я разрабатываю свои методы. Вот пример ...Избегайте исключения NullReference при доступе к свойствам навигации EF
Задача содержит много ролей, каждая роль ссылается на пользователя.
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» - это не тот ответ, который я ищу.
Спасибо!
EDIT:
Я знаю, что я могу загрузить задачу, как это ...
var task = context.Tasks.Include(x=>x.Roles.Select(z=>z.User)).FirstOrDefault();
То, что я хочу знать, как я могу разработать свой метод, так что, когда я вернусь и использовать его Через 6 месяцев я знаю, какие данные нужно загружать в мои сущности? Определение метода не указывает, что необходимо для его использования. Или как заблокировать эти NullReferences. Должен быть лучший дизайн.
возможно дубликат [ Что такое исключение NullReferenceException в .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) –
Это ничем не отличается от любой другой проблемы «NullReferenceException». –