Czy możliwe jest generowanie indeksów tabel wraz z resztą schematu bazy danych za pomocą Fluent NHibernate? Chciałbym być w stanie wygenerować pełną bazę danych DDL za pośrednictwem automatycznego procesu kompilacji.Generowanie indeksów tabel przy użyciu Fluent NHibernate
Odpowiedz
W nowszych wersjach Fluent NHibernate, można wywołać metodę Index()
zrobić to zamiast używać SetAttribute
(który już nie istnieje):
Map(x => x.Prop1).Index("idx__Prop1");
Masz na myśli indeksy w kolumnach?
Możesz to zrobić ręcznie w swoich plikach ClassMap<...>
, dodając .SetAttribute("index", "nameOfMyIndex")
, np. tak:
Map(c => c.FirstName).SetAttribute("index", "idx__firstname");
lub można to zrobić za pomocą atrybutów automappera - np. tak:
Po utworzeniu modelu trwałości:
{
var model = new AutoPersistenceModel
{
(...)
}
model.Conventions.ForAttribute<IndexedAttribute>(ApplyIndex);
}
void ApplyIndex(IndexedAttribute attr, IProperty info)
{
info.SetAttribute("index", "idx__" + info.Property.Name");
}
a następnie to zrobić do podmiotów:
[Indexed]
public virtual string FirstName { get; set; }
Lubię ten ostatni. Jest to dobry kompromis między brakiem wpływu na twój model domeny, ale wciąż jest bardzo skuteczny i jasny, co się dzieje.
To dokładnie to, czego szukałem. Dziękuję Ci. –
Odpowiedź Mookida jest świetna i bardzo mi pomogła, ale w międzyczasie zmieniło się ciągle zmieniające się Fluent NHibernate API.
więc właściwy sposób pisać mookid próbkę teraz jest następujący:
//...
model.ConventionDiscovery.Setup(s =>
{
s.Add<IndexedPropertyConvention>();
//other conventions to add...
});
gdzie IndexedPropertyConvention jest następująca:
public class IndexedPropertyConvention : AttributePropertyConvention<IndexedAttribute>
{
protected override void Apply(IndexedAttribute attribute, IProperty target)
{
target.SetAttribute("index", "idx__" + target.Property.Name);
}
}
Sieć [indeksowane] atrybut działa tak samo teraz.
- 1. Fluent NHibernate HasManyToMany() Mapping
- 2. Obscure błąd NHibernate/Fluent NHibernate
- 3. Wstawianie kolekcji jednostek luzem przy użyciu Fluent NHibernate
- 4. Mapowanie DayOfWeek z obszaru nazw System przy użyciu Fluent Nhibernate
- 5. Fluent NHibernate Default Conventions
- 6. Fluent NHibernate question
- 7. Fluent Nhibernate left join
- 8. Fluent NHibernate Gdzie Klauzula
- 9. Fluent NHibernate LazyLoad Issues
- 10. Generowanie modeli z istniejących tabel przy użyciu Rails 3
- 11. mapowania enum z Fluent NHibernate
- 12. Fluent NHibernate generuje dodatkowe kolumny
- 13. Fluent NHibernate AutoMapping z dyskryminatorem
- 14. Mapowanie Fluent Nhibernate ma wiele
- 15. Fluent NHibernate CheckProperty i Daty
- 16. Czy istnieje książka Fluent NHibernate?
- 17. Fluent NHibernate ŁączonySubClass jest przestarzały
- 18. Fluent NHibernate mapowanie zerowalne enum
- 19. Automapping dziedziczenia z Fluent NHibernate
- 20. Fluent NHibernate: odwzorowywanie słownika list
- 21. Fluent NHibernate - Mapa listę ciągów
- 22. Fluent NHibernate mapowania SQL Widoki
- 23. Wiele indeksów możliwe przy użyciu HasColumnAnnotation?
- 24. Mapowanie zagnieżdżonych komponentów w Fluent NHibernate
- 25. ActiveRecord znajdowanie istniejących indeksów tabel
- 26. Jak skonfigurować NHibernate (lub Fluent NHib), aby dodać prefiks nazwy tabeli do wszystkich nazw tabel?
- 27. Fluent NHibernate automapping jako nvarchar (max)
- 28. fluent nhibernate r1.0 fluent mapping disable leniwy ładunek
- 29. Hrabia indeksów przy użyciu „za” w Pythonie
- 30. Generowanie permutacji przy użyciu basha
Poprawnie, interfejs API został zmieniony i teraz jest to uważany za prawidłowy sposób ustawiania indeksów. Zaktualizowałem odpowiedź na to pytanie, aby odzwierciedlić tę zmianę. Dziękuję Ci. –