Fluent NHibernate Eins-Zu-Viele-Zuordnung
Habe ich die folgenden 2 Klassen:
Anzeige
public virtual int Id { get; set;
public virtual IList<AdvertImage> AdvertImages { get; set; }
AdvertImage
public virtual int Id { get; set; }
public virtual string Filename { get; set;
public virtual Advert Advert { get; set; }
In der DB, meine AdvertImages Tisch hat die FK 'AdvertId", die bezieht sich auf die Werbung Tabelle, die die PK von 'Id'.
Dies ist eine Eins-Zu-Viele-Zuordnung, dass eine Anzeige kann viele Bilder.
Meine Fluent NHibernate-mappings (bearbeitet für die Kürze) sind:
AdvertMap
Id(x => x.Id)
.GeneratedBy.Identity();
...
HasMany(x => x.AdvertImages)
.KeyColumn("AdvertId")
.Inverse();
...
Table("Adverts");
AdvertImageMap
Id(x => x.Id)
.GeneratedBy.Identity();
...
References(x => x.Advert)
.Column("AdvertId");
...
Table("AdvertImages");
Ich bin erstellen einer neuen Instanz der Advert
im code, dann Auffüllen der AdvertImages
Eigenschaft (der Anzeige) mit einem List<AdvertImage>
.
Wenn ich nach bestehen meiner Advert
Objekt in die DB, ich möchte die AdvertImages eingefügt werden, in Ihrer AdvertImages Tabelle, aber aufgrund der Beziehung zwischen den 2 Tabellen, ich brauche das Inserat insertion passieren erste, so wie der PK-Id generiert, die dann eingefügt werden, in der AdvertImages Tabelle. (Wenn ich meine Liste der AdvertImage, ich bin bevölkern die Filename-Eigenschaft, aber offensichtlich nicht das neue AdvertId in diesem Stadium, so soll aufgefüllt werden, wenn die Anzeige beibehalten wird, um die DB).
Ich habe versucht, das Experimentieren mit verschiedenen Inverse() und Cascade-Einstellungen aber noch nicht gelungen, noch. Kann mir jemand bitte helfen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie brauchen, um Ihre
Advert
mapping-Kaskade:Sollten Sie dann in der Lage sein, etwas zu tun, wie das beibehalten eines
Advert
Objekt und KinderAdvertImage
.Meine Entitäten enthalten in der Regel Add-und Remove-Methoden für bidirektionale eins-zu-viele Beziehungen wie diese:
Ich hatte das gleiche Problem. Ich verbrachte eine Weile versucht, alle verschiedenen Arten der Zuordnung. Dann entdeckte ich meine Zuordnungen waren in Ordnung und es war eigentlich, dass ich brauchte, um mein wrap-Sitzung in einer Transaktion, und verwenden Sie die Commit() Methode, nach der Sitzung.SaveOrUpdate () - Methode.
Was funktioniert für mich in der Regel ist, um die foreign-key-Spalte, um null-Werte zulassen im DB - das wäre Ihre AdvertId Spalte, aber ich bin mir nicht sicher, ob das funktionieren würde in Ihrem Fall, da Sie mit der Identität. Was NHibernate tut, ist FÜGEN Sie alle mit einer Abfrage und dann updates Kind-Tabelle, foreign key-Spalte, um die richtige id der übergeordneten Tabelle. Vielleicht wäre es in Ihrem Fall auch.
Hier ist eine ähnliche Frage, die vielleicht helfen: Cascade Einsatz auf eins-zu-viele mit fluent NHibernate
Fluent NHibernate
.