Ist es möglich, eine Integer-Eigenschaft einer Klasse Auto Inkrement von der Datenbank verwaltet, aber nicht ein Primärschlüssel (oder Id als NHibernate bezieht sich auf sie)? Ich habe Probleme, Beispiele dafür zu finden. Jede Hilfe wäre willkommen. Vielen Dank.fließend nhibernate auto increment nicht Schlüssel (Id) Eigenschaft
Antwort
Zwei Optionen.
, wenn die Datenbank 100% verantwortlich dafür ist, brauchen Sie nur NHibernate zu sagen, dass das Objekt erzeugt wird und nicht in irgendwelchen Updates/isnerts aufzunehmen. Der Nachteil ist, dass NH eine zusätzliche Auswahl treffen muss, um den Wert im Speicher frisch zu halten.
< property name = "Foo" erzeugt = "always" update = "false" Insert = "false" />
, wenn die Datenbank nicht verantwortlich ist und Sie nur wollen, dies automatisch haben, können Sie Verwenden Sie einen Interceptor, um den Wert in einer Einfügung auf 1 zu setzen und bei einer Aktualisierung um 1 zu erhöhen.
http://www.nhforge.org/doc/nh/en/index.html#objectstate-interceptors (11,1 - Interceptor)
Sie würden OnSave() überschreiben, die Immobilie zu finden und den Anfangswert gesetzt und dann außer Kraft setzen OnFlushDirty() die Eigenschaft Eigenschaft und Zuwachs zu finden.
Edit:
Ich bin ein Idiot, bemerkte es nicht gesagt, Sie Fluent NHibernate.
Edit # 2:
Ich glaube, Sie auch bei der Verwendung dieser Spalte als Versionierung interessiert sein könnte?
< version name="Foo" generated="always" />
Dies funktioniert für mich:
public class Potato
{
public virtual Guid Id { get; protected set; }
public virtual int LegacyId { get; protected set; }
}
public class PotatoMap : ClassMap<Potato>
{
public PotatoMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.LegacyId).CustomSqlType("INT IDENTITY(1,1)").Not.Nullable().ReadOnly().Generated.Insert();
}
}
Grundsätzlich ist die ganze Zahl wird durch die Datenbank und NHibernate generiert werden angewiesen, auf Einsätze abzurufen.
Es ist wichtig zu beachten, dass die Zuordnung nur die Hälfte der Antwort ist, und es wird nicht funktionieren, wenn die Spalte nicht als IDENTITY erstellt wird. CustomSqlType wird dem Mapping mit dem Zweck hinzugefügt, beim Generieren der Tabellen mit SchemaExport die richtige SQL zu erstellen. Dies ist das erzeugte SQL:
create table [Potato] (
Id UNIQUEIDENTIFIER not null,
LegacyId INT IDENTITY(1,1) not null,
primary key (Id)
)
Auf der anderen Seite, nur lesbar und Generated.Insert() wird NHibernate sagen, dass der Wert durch die Datenbank auf Einsätze nur automatisch generiert wird, und deshalb hat es die Datenbank für die abfragen Wert bei jedem Einsatz.
Beachten Sie, dass ich dies nur mit Sql Server getestet habe. Der benutzerdefinierte Typ wird sich wahrscheinlich ändern oder in anderen Datenbanken möglicherweise nicht verfügbar sein.
- 1. Fließend NHibernate - HasMany auf zusammengesetzten Schlüssel
- 2. Detect Auto Increment Spalte
- 3. Fließend NHibernate HasManyToMany() Mapping
- 4. C# fließend nhibernate
- 5. Fließend nHibernate Konfiguration
- 6. aus fließend Nhibernate
- 7. fließend-nhibernate: nicht die Datensätze immer
- 8. Hibernate Probleme mit Auto Increment ID MYSQL 5
- 9. Fließend nHibernate Automapping Erstellung nicht Plural Tabellenname
- 10. Script eine MongoDB mit einer Auto-Increment-ID
- 11. Wie funktioniert MySQL Auto Increment?
- 12. fließend nhibernate nicht unterstützt Ausnahme newexpression
- 13. Realm Auto Increment Feld Beispiel
- 14. nhibernate nicht Speichern Fremdschlüssel Id
- 15. fließend NHibernate - beigetretene Unterklasse ForeignKey Name
- 16. (fließend) NHibernate - Zuordnung von Varchar zu Int32
- 17. Odoo Neue API Auto Increment/Sequencing
- 18. Teradata erstellen Tabelle Auto-Increment-Spalte Fehler
- 19. fließend nhibernate r1.0 fließend mapping deaktivieren lazy load
- 20. (Fließend) NHibernate Wörterbuch-Mapping mit Klasse Key
- 21. Fließend NHibernate Self Referencing Viele zu viele
- 22. fließend nhibernate Komponente one-to-many
- 23. NHibernate fließend HasMany Zuordnung fügt NULL Fremdschlüssel
- 24. Abrufen von Datensätzen mit Nullwert - fließend nhibernate
- 25. Fließend NHibernate mit ManyToMany und benutzerdefinierte Verknüpfungstabelle
- 26. Fließend nHibernate keine Identitätsspalte in Tabelle
- 27. Autoinkrement-Eigenschaft nicht Schlüssel
- 28. Wie eine ID-Spalte neu Sequenz nach einer Reihe (NOT AN AUTO-INCREMENT)
- 29. Auto Increment Gaps bei INSERT ... SELECT sogar mit innodb_autoinc_lock_mode = 0
- 30. wie setzen generate_statistics = true mit fließend nhibernate
Keine Sorge, es ist fast das Gleiche. Karte (x => x.Foo) .ReadOnly().SetAttribute ("erzeugt", "immer"); Das SetAttribute wird von Generated.Always ersetzt, wenn wir 1.0 erreichen. –
Ich habe das neueste FNH heruntergeladen und war irgendwie verwirrt von .Update() nahm keinen Parameter. Ich war mir nicht sicher, wie das enden würde. ReadOnly() macht jedoch Sinn. – anonymous