Ich habe eine Entität, die aus Eigenschaften aus zwei verschiedenen Tabellen besteht, wie ich here beschrieben habe und ich Probleme habe, wenn ich ein neues Element einfügen. Beim Einfügen muss ich nur die Felder in einer der beiden Tabellen aktualisieren. Mit der Methode ReadOnly()
konnte ich NHibernate veranlassen, die meisten Felder von [RegistrationField]
beim Speichern zu ignorieren. Allerdings kann ich nicht versuchen, einen neuen Eintrag für den Fremdschlüssel in [RegistrationField]
zu speichern, obwohl für diesen Schlüssel bereits ein Eintrag existiert.Aktualisieren Sie nur eine Tabelle beim Speichern für eine Entität mit mehreren Tabellen
Mein Mapping für die Klasse ist:
public class RegistrationFieldMap : ClassMap<RegistrationField>
{
public RegistrationFieldMap()
{
Table("AccountRegistrationField");
Id(r => r.ID).Column("RegistrationID");
Map(r => r.AccountID);
Map(r => r.DefaultValue);
Map(r => r.FieldID);
Map(r => r.IsRequired);
Map(r => r.Label);
Map(r => r.Priority);
Join("RegistrationField", t =>
{
t.Map(r => r.FieldType).ReadOnly();
t.Map(r => r.HtmlID).ReadOnly();
});
}
}
Wenn ich meinen Test ausführen, um die Abbildung, um zu überprüfen, versucht NHibernate die folgenden zwei SQL-Anweisungen auszuführen:
INSERT INTO AccountRegistrationField (
AccountID,
DefaultValue,
FieldID,
IsRequired,
Label,
Priority)
VALUES (@p0, @p1, @p2, @p3, @p4, @p5);
select SCOPE_IDENTITY();
@p0 = 1 [Type: Int32 (0)],
@p1 = 'bar' [Type: String (4000)],
@p2 = 1 [Type: Int32 (0)],
@p3 = False [Type: Boolean (0)],
@p4 = 'bar' [Type: String (4000)],
@p5 = 1 [Type: Int32 (0)]
INSERT INTO RegistrationField (UserRegistrationField_id) VALUES (@p0);
@p0 = 12 [Type: Int32 (0)]
ich nur muß es Führen Sie die erste Anweisung aus, da die Tabelle [RegistrationField]
eine statische Liste mit Werten enthält und neue Elemente niemals hinzugefügt werden sollten.
Alle und alle Vorschläge willkommen.
Warten, wenn RegistrationField eine Lookup-Tabelle ist, dann 'Join' ist ** * nicht *** was du brauchst. Die Art und Weise, wie du das Problem beschrieben hast, hat mich dazu gebracht, das zu denken, aber du solltest wahrscheinlich eine regelmäßige Referenz verwenden. –
Ich muss Diego auf diesem einen zustimmen. – Phill