This является фрагмент моего проекта базы данных, и this является фрагмент генерируется автоматически БД с помощью Fluent NHibernateссылки не-нуль свойства нулевое или транзиторное значение - понимание обратного и Cascade
И это мои объекты и классы картографии в Fluent NHibernate проекта выше DB.
Сущность:
public class BaseEntity<T> where T : BaseEntity<T> {
public virtual int Id { get; set; }
...
}
public class Person<T> : BaseEntity<T> where T : BaseEntity<T> {
public virtual string FirstName { get; set; }
public virtual string SecondName { get; set; }
public virtual string LastName { get; set; }
public virtual string PESEL { get; set; }
public virtual DateTime BirthDate { get; set; }
public virtual string City { get; set; }
public virtual string PostalCode { get; set; }
public virtual string Street { get; set; }
public virtual string HouseNr { get; set; }
public virtual string ApartmentNr { get; set; }
public virtual string PhoneNr { get; set; }
public virtual string Email { get; set; }
}
public class DrivingLicense : BaseEntity<DrivingLicense> {
#region Relations
public virtual IList<DrivingLicensePermissions> DrivingLicensePermissions { get; set; }
public virtual Student Student { get; set; }
#endregion
public virtual DateTime IssueDate { get; set; }
public virtual string DrivingLicenseNr { get; set; }
}
public class DrivingLicensePermissions : BaseEntity<DrivingLicensePermissions> {
#region Relations
public virtual DrivingLicense DrivingLicense { get; set; }
#endregion
public virtual DrivingLicenseCategory Category { get; set; }
}
Отображение:
class StudentMap : ClassMap<Student> {
public StudentMap() {
Id(x => x.Id);
Map(x => x.FirstName).Not.Nullable().Length(25);
Map(x => x.SecondName).Nullable().Length(25);
Map(x => x.LastName).Not.Nullable().Length(50);
Map(x => x.PESEL).Nullable().Length(11);
Map(x => x.BirthDate).Not.Nullable();
Map(x => x.City).Not.Nullable().Length(50);
Map(x => x.PostalCode).Nullable().Length(6);
Map(x => x.Street).Not.Nullable().Length(50);
Map(x => x.HouseNr).Not.Nullable().Length(10);
Map(x => x.ApartmentNr).Nullable().Length(10);
Map(x => x.PhoneNr).Nullable().Length(20);
Map(x => x.Email).Nullable().Length(100);
References(x => x.DrivingLicense).Nullable().Cascade.All();
References(x => x.User).Nullable().Cascade.All();
HasMany(x => x.Participants).Cascade.All();
}
}
class DrivingLicenseMap : ClassMap<DrivingLicense> {
public DrivingLicenseMap() {
Id(x => x.Id);
Map(x => x.IssueDate).Not.Nullable();
Map(x => x.DrivingLicenseNr).Not.Nullable().Length(20);
HasMany(x => x.DrivingLicensePermissions).Cascade.All();
References(x => x.Student).Not.Nullable();
}
}
class DrivingLicensePermissionsMap : ClassMap<DrivingLicensePermissions> {
public DrivingLicensePermissionsMap() {
Id(x => x.Id);
Map(x => x.Category).Not.Nullable();
References(x => x.DrivingLicense).Not.Nullable();
}
}
И моя проблема это исключение: не-нулевое свойство ссылается на нулевое или переходное значение Model.Entities.DrivingLicense .Student, пока я пытаюсь сохранить объект студента как этот
session.Save(student);
, который назначен объект DrivingLicense ему это DrivingLicense свойство.
Я предполагаю, что он вызван из-за плохого сопоставления - неправильный каскад или отсутствие инверсии. Я пробовал много комбинаций и не мог заставить его работать. Также верно, что таблица Student имеет DrivingLicense_id и наоборот, DrivingLicense имеет столбец Student_id ?!
Голосов за то, что они всегда удобны. Согласен с тобой.Он будет работать, если он установит ТОЛЬКО 'id'' Student' вместо установки всей Entity. Поправьте меня, если я ошибаюсь. –
Несомненно. Я не думал о том, что «Студент» не является нулевым, но временным. В этом случае возникает каскадная проблема. –
Похоже, [это] (http://i.imgur.com/deJNCJr.png). Нет нулевого значения. Но когда я хочу добавить ученика без DrivingLicense, в свойстве DrivingLicense для Student есть null, и при его сохранении ошибки нет. Итак, есть каскадная проблема? Но как это исправить? –