У нас есть объект Enrollment, в котором есть объект Student, а в объекте Student есть много объектов Enrollment. Если я опущу Cascade.SaveUpdate () из ссылки на студента Enrollment, обновления таблицы Student не будут выполнены, но обновления объекта Enrollment завершатся успешно. Но если я добавлю Cascade.SaveUpdate () в ссылку на студента Enrollment, обновления таблицы Student будут работать нормально, но обновления таблицы Enrollment не пройдут. Никаких исключений не выдается, обновления просто не удаются.
Должен быть какой-то способ сохранить объекты по обе стороны отношений, но чего мне не хватает?
Вот фрагмент кода, дайте мне знать, если вам нужно больше:
Карта зачисления:
References(x => x.Student)
.Column("student_id");// without the cascade on the next line, this fails to update changes to Student
//.Cascade.SaveUpdate();// when uncommented this updates changes to Student but blocks updates to Enrollment
StudentMap:
HasMany(x => x.Enrollments)
.KeyColumn("student_id")
.Inverse()
.Cascade.SaveUpdate();
База данных вызова:
public Application GetApplication(long applicationId)
{
using (var session = sessionFactory.OpenSession())
{
var query = session.Linq();
query.Expand(x => x.Enrollment);
query.Expand(x => x.Enrollment.Student);
var result = from entity in query
where entity.ApplicationId == applicationId
select entity;
return result.Count() > 0 ? result.First() : null;
}
}
Сохранение базы данных:
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
try
{
session.SaveOrUpdate(entity);
transaction.Commit();
}
catch(Exception ex)
{
transaction.Rollback();
throw;
}
}
}