Logika związana z forum
Forum będzie składało się z kategorii. Dzielą one całe forum na części związane ze sobą tematycznie. Każda kategoria możne posiadać wiele forów. W skład forów wchodzą tematy które zaś maja wiele postów. Aktualnie modele są bardzo proste. Wraz z rozwojem projektu i zwiększaniem funkcjonalności będą się powiększać
Klasa Kategorii forum:
public class ForumCategory : BaseEntity { public virtual string Name { get; set; } public virtual IEnumerable<Forum> Forums { get; set; } }Klasa Forum:
public class Forum : BaseEntity { public virtual string Name { get; set; } public virtual string Description { get; set; } public virtual ForumCategory Category { get; set; } public virtual IEnumerable<Topic> Topics { get; set; } }Klasa Temat:
public class Topic : BaseEntity { public virtual string Name { get; set; } public virtual Forum Forum { get; set; } public virtual IEnumerable<Post> Posts { get; set; } }Klasa Post:
public class Post : BaseEntity { public virtual string Name { get; set; } public virtual Topic Topic { get; set; } }Nhibernate - relacje jeden do wielu
Jak widać powyżej w naszym prostym modelu encji parę relacji: jeden do wielu. W Fluent Nhibernate relacje te mapuje się przez metody References i HasMany. References oznacza to samo co metoda HasOne czyli że encja posiada 1 obiekt w danej relacji. Natomiast HasMany oznacza ze dana encja posiada wiele obiektów z danej relacji. Kombinacja tych 2 metod powoduje powstanie relacji 1 do wielu. Teraz prosty przykład mapowanie relacji jeden do wielu: ForumCategory -> Forum
public class ForumCategoryMap : ClassMap<ForumCategory> { public ForumCategoryMap() { Id(p => p.Id).GeneratedBy.Guid(); Map(p => p.Name).Not.Nullable().Length(256); HasMany(p => p.Forums); } }A tutaj mamy druga końcówkę naszej relacji czyli klasę Forum:
public class ForumMap : ClassMap<Forum> { public ForumMap() { Id(p => p.Id).GeneratedBy.Guid(); Map(p => p.Name).Not.Nullable().Length(256); Map(p => p.Description).Not.Nullable().Length(256); References(p => p.Category); HasMany(p => p.Topics); } }Jak widać w bardzo prostu sposób za pomocą Fluent Nhibernate jesteśmy w stanie stworzyć relacje jeden do wielu.
Oprócz tych zmian wprowadziłem podstawowy layout forum. Usunąłem commandy. Ich role przejma teraz DataTransferObjecty. Podmieniłem walidacje po stronie klienta z standardowej Microsoftu na jquery. Wymagało to ściagniecia MVC Futures i podmiany w widokach pliku MicrosoftMvcJQueryValidation.js zamiast MicrosoftMvcValidation.js.
Brak komentarzy:
Prześlij komentarz