ich ein einfaches Fluent NHibernate Modell mit zwei verwandten Klassen haben:Fluent NHibernate eine Eins-zu-viele-Beziehung Fremdschlüssel Einstellung auf null
public class Applicant
{
public Applicant()
{
Tags = new List<Tag>();
}
public virtual int Id { get; set; }
//other fields removed for sake of example
public virtual IList<Tag> Tags { get; protected set; }
public virtual void AddTag(Tag tag)
{
tag.Applicant = this;
Tags.Add(tag);
}
}
public class Tag
{
public virtual int Id { get; protected set; }
public virtual string TagName { get; set; }
public virtual Applicant Applicant { get; set; }
}
Meine fließend Mapping ist die folgende:
public class ApplicantMap : ClassMap<Applicant>
{
public ApplicantMap()
{
Id(x => x.Id);
HasMany(x => x.Tags).Cascade.All();
}
}
public class TagMap : ClassMap<Tag>
{
public TagMap()
{
Id(x => x.Id);
Map(x => x.TagName);
References(x => x.Applicant).Not.Nullable();
}
}
Wann immer Ich versuche update ein Bewerber (ein neues einfügt, funktioniert gut), es schlägt fehl und ich sehe die folgende SQL-Ausnahme in den Protokollen:
11:50:52.695 [6] DEBUG NHibernate.SQL - UPDATE [Tag] SET Applicant_id = null WHERE Applicant_id = @p0;@p0 = 37 [Type: Int32 (0)]
11:50:52.699 [6] ERROR NHibernate.AdoNet.AbstractBatcher - Could not execute command: UPDATE [Tag] SET Applicant_id = null WHERE Applicant_id = @p0 System.Data.SqlClient.SqlException (0x80131904): Cannot insert the value NULL into column 'Applicant_id', table 'RecruitmentApp.dbo.Tag'; column does not allow nulls. UPDATE fails.
Warum versucht NHibernate, die Tag-Tabelle zu aktualisieren und Applicant_id auf null zu setzen? Ich bin ratlos.
wie ein Charme. Vielen Dank! Ich bin immer noch ein wenig verwirrt, was inverse bedeutet, aber ich werde ein wenig lesen. Ich sehe es jedoch nicht in der Dokumentation. – arknotts
Vielen Dank für die Lösung des Problems, es funktionierte ohne Probleme. – Desmond