Wie soll ich meine Zuordnungen konfigurieren, um zu vermeiden, dass NHibernate die Fremdschlüssel meiner untergeordneten Entitäten sofort nach dem Einfügen aktualisiert?NHibernate insert generiert Updates für Sammlungselemente
z. Übergeordnete Klasse wird wie folgt abgebildet:
class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
Id(x => x.Id)
.GeneratedBy.Increment();
Map(x => x.Name);
HasMany(x => x.ChildNodes)
.KeyColumns.Add("Parent_id")
.Cascade.All();
}
}
Lassen Parent
haben eine Reihe von Child
Objekte:
Parent p = new Parent("test");
p.ChildNodes.AddRange(GetSomeDummyNodes());
Wenn ich die übergeordnete Entität zu speichern, erzeugt SQL sieht wie folgt aus:
INSERT INTO [Parent] (Name, Id) VALUES (@p0, @p1); @p0 = 'test', @p1 = 0
INSERT INTO [Child] (Name, Id) VALUES (@p0); @p0 = 'child1', @p1 = 0
INSERT INTO [Child] (Name, Id) VALUES (@p0); @p0 = 'child2', @p1 = 1
INSERT INTO [Child] (Name, Id) VALUES (@p0); @p0 = 'child3', @p1 = 2
UPDATE [Child] SET Parent_id = @p0 WHERE Id = @p1; @p0 = 0, @p1 = 0
UPDATE [Child] SET Parent_id = @p0 WHERE Id = @p1; @p0 = 1, @p1 = 0
UPDATE [Child] SET Parent_id = @p0 WHERE Id = @p1; @p0 = 2, @p1 = 0
Wenn ich Guid.Comb als Id-Spaltengenerator verwende, gibt es keine Updates, Fremdschlüssel werden sofort in INSERT
-Anweisungen gesetzt. Aber da ich die Increment
Strategie verwende (die auch IDs auf der Client-Seite erstellt, und es gibt keine SELECT
Anweisung, die den ID-Wert aus der Datenbank lesen würde, sehe ich nicht, warum IDs nicht sofort gesetzt werden konnten.
Danke, das es tat. – Groo