Я пишу приложение asp.net mvc, чтобы изучить Entity Framework, и я столкнулся с проблемой, с которой я не знаю, как обращаться. Для простоты позволяет принимать следующую структуру таблицы:Entity Framework - объединение нулей - NullReferenceException не обрабатывается кодом пользователя
Movie
ID (int, not null, auto increment)
Name (varchar)
GenreID (int)
и
Genre
ID (int, not null, auto increment)
Name (varchar)
Movie.GenreID является ссылкой FK для Genre.ID
Я принес во всех таблицах с помощью визуального дизайнер в VS 2008 и попробовал следующий запрос Linq:
IEnumerable<Movie> movieList = from f in dataContext.MovieSet.Include("Genre").ToList();
Я могу вывести данные в целях, используя:
<%= Html.Encode(movieList.Genre.Name) %>
Все работает прекрасно, пока я не элемент в таблице Movie с нулевой GenreID. Есть ли что-то, что я могу сделать для этого запроса, чтобы он все еще мог выводить (просто оставьте его пустым, если применимо), или я делаю что-то ужасно неправильно?
Это очень полезно, поскольку я новичок как в Linq, так и в EF. Есть ли способ сделать запрос, подобный тем, которые вы разместили выше, которые либо возвращаются, либо могут быть отправлены в строго типизированные классы, которые были созданы, когда я импортировал схему таблицы в EF? – mynameiscoffey
В ответ на ваш второй пример, я также получить тот же эффект, если бы я изменить «выбрать новый» раздел для: выбрать новый { п, Genre = (f.Genre == NULL)? new Жанр(): f.Genre } но я все еще сталкиваюсь с проблемой выбора типов выше. Еще раз спасибо за ваш ответ - я очень ценю примеры, которые вы мне дали. – mynameiscoffey
Вы можете вернуть строго типизированные классы. Единственное, что вам нужно иметь в виду, это то, что Linq не поддерживает конструкторы, которые принимают параметры. Вместо этого используйте синтаксис инициализатора объекта: 'select new Movie {Name = f.Name, GenreName = f.Genre == null? "": g.Genre.Name}; ' –