Próbuję odwzorować właściwość enum (instancja System.DayOfWeek) w moim modelu na pole z liczbą całkowitą. Inne właściwości wyliczeniowe w modelu powinny być odwzorowane na łańcuchy, więc nie chcę definiować konwencji.Wylicz na liczbę całkowitą, powodując aktualizacje dla każdego koloru.
Rozumiem, że powinno to być możliwe przy użyciu biegle mapowanie jak:
Map(x => x.DayOfWeek).CustomType<int>();
i rzeczywiście, na pierwszy rzut oka wydaje się działać.
Zauważyłem jednak, że wystąpienia obiektów z mapowanymi w ten sposób właściwościami są aktualizowane za każdym razem, gdy sesja była opróżniana, nawet jeśli nie wprowadzono do nich żadnych poprawek.
Aby dowiedzieć się, co jest przyczyną tego koloru, ustawiłem IPreUpdateEventListener i sprawdziłem stan OldState i State of the entity. Zobacz załączony obraz. W OldState odpowiednim obiektem jest int, podczas gdy w State jest DayOfWeek.
Jeśli korzystam z mapowania XML HBM bez określonego atrybutu typu, ten problem nie występuje.
Więc ...
Jest to błąd lub niedociągnięcie w GenericEnumMapper? Czy jest jakiś sposób na odwzorowanie FNH, aby nie podawał żadnego atrybutu typu na wygenerowanym HBM? Jeśli nie, czy mogę określić domyślny typ, który NH używa do wyliczenia (i co to jest)?
Co się stanie, jeśli po prostu map bez CustomType? NH powinien sam się domyślić? –
@ShaneC - NH będzie, ale zachowanie FNH domyślnie będzie próbowało utrzymywać wyliczenie jako ciąg. –