Czy możliwe jest posiadanie właściwości całkowitej klasy auto increment zarządzanej przez bazę danych, ale nie może to być klucz podstawowy (lub Id jak NHibernate odnosi się do nich)? Mam problem ze znalezieniem przykładów, jak to zrobić. Każda pomoc będzie doceniona. Dzięki.fluent nhibernate auto increment non key (Id) property
Odpowiedz
Dwie opcje.
jeśli baza danych jest w 100% odpowiedzialny za to po prostu trzeba powiedzieć NHibernate, że nieruchomość jest generowany i nie obejmuje go w żadnych nowości/isnerts. Minusem jest to, że NH będzie musiał dokonać dodatkowej selekcji, aby zachować świeżą wartość w pamięci.
< nazwa property = "Foo" generowane = "always" update = "false" insert = "false" />
jeśli baza danych nie jest odpowiedzialny i chcesz po prostu mieć to zrobione automatycznie można użyj przechwytywacza, aby ustawić wartość 1 na wstawce i zwiększyć ją o 1 w aktualizacji.
http://www.nhforge.org/doc/nh/en/index.html#objectstate-interceptors (11,1 - Interceptors)
byłoby zastąpić OnSave(), aby znaleźć nieruchomość i ustawić wartość początkową, a następnie zastąpić OnFlushDirty(), aby znaleźć Nieruchomość i przyrost.
Edit:
jestem idiotą, nie zauważył pan powiedział Fluent NHibernate.
Edit # 2:
myślę, że może być również zainteresowany wykorzystaniem tej kolumny jako wersjami?
< version name="Foo" generated="always" />
Działa to dla mnie:
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();
}
}
Zasadniczo całkowitą ma zostać wygenerowane przez bazę danych i NHibernate jest instruowany, aby pobrać go na wkładkach.
Należy pamiętać, że mapowanie stanowi tylko połowę odpowiedzi, a będzie działało , a nie, jeśli kolumna nie zostanie utworzona jako TOŻSAMOŚĆ. CustomSqlType jest dodawany do mapowania w celu utworzenia odpowiedniego sql podczas generowania tabel za pomocą SchemaExport. To jest generowane sql:
create table [Potato] (
Id UNIQUEIDENTIFIER not null,
LegacyId INT IDENTITY(1,1) not null,
primary key (Id)
)
Z drugiej strony, tylko do odczytu i Generated.Insert() powie NHibernate, że wartość jest wygenerowany automatycznie przez bazę danych wyłącznie na wkładkach, a zatem ma do kwerendy bazy danych dla wartość przy każdej wstawce.
Zauważ, że testowałem to tylko z Sql Server. Typ niestandardowy prawdopodobnie zmieni się lub może nie być dostępny w innych bazach danych.
- 1. Mongoose auto-increment
- 2. Mapowanie Fluent Nhibernate ma wiele
- 3. Fluent NHibernate mapowanie na wielu polach non-PK
- 4. Fluent NHibernate wymusić Not Nullable na Foreign Key Reference
- 5. Heroku MySQL Auto Increment
- 6. Auto Increment dla Oracle
- 7. Fluent NHibernate AutoMapping z dyskryminatorem
- 8. Fluent NHibernate generuje dodatkowe kolumny
- 9. Fluent NHibernate CheckProperty i Daty
- 10. Fluent NHibernate HasManyToMany() Mapping
- 11. Redshift psql auto increment na parzystą liczbę
- 12. Obscure błąd NHibernate/Fluent NHibernate
- 13. mysql unlimited klucze podstawowe auto increment
- 14. Fluent NHibernate - Mapa listę ciągów
- 15. Zachowanie Realm and auto increment (Android)
- 16. Fluent NHibernate Default Conventions
- 17. Fluent NHibernate question
- 18. Fluent Nhibernate left join
- 19. Fluent NHibernate Gdzie Klauzula
- 20. Fluent NHibernate LazyLoad Issues
- 21. Fluent NHibernate: odwzorowywanie słownika list
- 22. mapowania enum z Fluent NHibernate
- 23. Fluent NHibernate mapowania SQL Widoki
- 24. jak ustawić generate_statistics = true z Fluent NHibernate
- 25. Auto-increment on Azure Table Storage
- 26. LINQ to Objects auto increment number
- 27. hive auto increment po pewnym numerze
- 28. C# Regex - Dopasuj i zamień, Auto Increment
- 29. przeznaczenie flagi auto increment w konfiguracji hazelcast
- 30. Czy istnieje książka Fluent NHibernate?
Nie martw się, to prawie to samo. Mapa (x => x.Foo) .ReadOnly().SetAttribute ("generated", "always"); Atrybut SetAttribute zostanie zastąpiony przez wartość Generate.Always, gdy osiągniemy wartość 1.0. –
Pobrałem najnowszy FNH i byłem nieco zdezorientowany przez .Update() nie biorąc parametru. Nie byłem pewien, co to się skończy, jak w mapowaniu. ReadOnly() ma jednak sens. – anonymous