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 wieluJak 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.
