А как насчет NotFound.Ignore ()?
public class GradeMap : ClassMap<Grade>
{
public GradeMap()
{
Id(x => x.GradeId);
Map(x => x.TaskName).NvarcharWithMaxSize().Not.Nullable();
Map(x => x.Weight).Not.Nullable().Precision(5).Scale(2);
Map(x => x.OutOf).Not.Nullable().Precision(5).Scale(2);
Map(x => x.Mark).Not.Nullable().Precision(5).Scale(2);
Map(x => x.CourseBackgroundColor).Not.Nullable();
Map(x => x.CoursePrefix).Not.Nullable();
References(x => x.Student).Not.Nullable();
References(x => x.Course)
.NotFound.Ignore();
}
}
EDIT:
Допустим, схема базы данных выглядит следующим образом:
Grade(GradeId, TaskName, Course_id)
Course(CourseId, Prefix)
Если для столбца Course_id нет ограничения по внешнему ключу, можно удалить строку в таблице Course с CourseId, которая соответствует столбцу Course_id в таблице оценок. E.g.:
Course table:
CourseId Prefix
1 Course1Prefix
Grade table:
GradeId TaskName Course_id
1 Grade1Task 1
без ограничения внешнего ключа вы можете выполнить этот dml-запрос:
delete from Course where CourseId = 1
И это может быть причиной проблемы, объясненной sJhonny.
Когда в отображении используется «NotFound.Ignore ()», NHibernate пытается загрузить курсы, принадлежащие всем классам, которые были загружены запросом:
session.Query<Grade>().ToList();
Прокси не генерируются, и если курс, на который ссылается оценка, не найден в базе данных, свойство Course просто равно нулю.
Если вы можете изменить схему базы данных, было бы полезно создать ограничение PK для столбца Course_id.