Advertisement
Guest User

Mika Kolari

a guest
Feb 28th, 2011
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.84 KB | None | 0 0
  1. // INTERFACES
  2.  
  3. public interface ISingleCategorized
  4. {
  5.     Category Category { get; set; }
  6. }
  7.  
  8. public interface IMultiCategorized
  9. {
  10.     IList<Category> Categories { get; set; }
  11. }
  12.  
  13. public interface IPage
  14. {
  15.     int Id { get; }
  16.     string Path { get; set; }
  17.     IPage Parent { get; set; }
  18. }
  19.  
  20. public interface ISearchablePage : IPage
  21. {
  22.     string SearchIndex { get; set; }
  23. }
  24.  
  25. public interface ISingleCategorizedPage : IPage, ISingleCategorized
  26. {
  27. }
  28.  
  29. public interface IMultiCategorizedPage : IPage, IMultiCategorized
  30. {
  31. }
  32.  
  33.  
  34. // ENTITY CLASSES
  35.  
  36. public abstract class Page : IPage
  37. {
  38.     public virtual int Id { get; set; }
  39.     public virtual IPage Parent { get; set; }
  40.     public virtual string Path { get; set; }
  41.  
  42.     [Searchable]
  43.     public virtual string Title { get; set; }
  44. }
  45.  
  46. public class Post : Page, ISearchablePage, IMultiCategorizedPage, IMultiTaggedPage
  47. {
  48.     [Searchable]
  49.     public virtual string Text { get; set; }
  50.  
  51.     // IMultiCategorizedPage
  52.     public virtual IList<Category> Categories { get; set; }
  53.     // IMultiTaggedPage
  54.     public virtual IList<Tag> Tags { get; set; }
  55.  
  56.     string ISearchablePage.SearchIndex { get; set; }
  57.  
  58.     public Post()
  59.     {
  60.         Categories = new List<Category>();
  61.         Tags = new List<Tag>();
  62.     }
  63. }
  64.  
  65. public class Article : Page, ISearchablePage, ISingleCategorizedPage, IMultiTaggedPage
  66. {
  67.     [Searchable]
  68.     public virtual string Text { get; set; }
  69.    
  70.     // ISingleCategorizedPage
  71.     public virtual Category Category { get; set; }
  72.     // IMultiTaggedPage
  73.     public virtual IList<Tag> Tags { get; set; }
  74.  
  75.     string ISearchablePage.SearchIndex { get; set; }
  76.  
  77.     public Article()
  78.     {
  79.         Tags = new List<Tag>();
  80.     }
  81. }
  82.  
  83.  
  84. // FLUENT NHIBERNATE MAPPING CLASSES
  85.  
  86. public class PageMapping : ClassMap<Page>
  87. {
  88.     public PageMapping()
  89.     {
  90.         Table("Page");
  91.         Id(x => x.Id,"Id");
  92.         References<Page>(x => x.Parent, "ParentId");
  93.         Map(x => x.Path, "Path");
  94.         Map(x => x.Title, "Title");
  95.  
  96.         DiscriminateSubClassesOnColumn("Type");
  97.     }
  98. }
  99.  
  100. public class PostMapping : SubclassMap<Post>
  101. {
  102.     public PostMapping()
  103.     {
  104.         Map(x => x.Text, "Text");
  105.         // IMultiCategorizedPage
  106.         HasManyToMany(x => x.Categories).Table("PageCategories").ParentKeyColumn("PageId").ChildKeyColumn("CategoryId").Cascade.SaveUpdate();
  107.         // IMultiTaggedPage
  108.         HasManyToMany(x => x.Tags).Table("PageTags").ParentKeyColumn("PageId").ChildKeyColumn("TagId").Cascade.SaveUpdate();
  109.         // ISearchablePage
  110.         Map(x => ((ISearchablePage)x).SearchIndex, "SearchIndex").LazyLoad();
  111.     }
  112. }
  113. public class ArticleMapping : SubclassMap<Article>
  114. {
  115.     public ArticleMapping()
  116.     {
  117.         Map(x => x.Text, "Text");
  118.         // ISingleCategorizedPage
  119.         References(x => x.Category, "CategoryId");
  120.         // IMultiTaggedPage
  121.         HasManyToMany(x => x.Tags).Table("PageTags").ParentKeyColumn("PageId").ChildKeyColumn("TagId").Cascade.SaveUpdate();
  122.         // ISearchablePage
  123.         Map(x => ((ISearchablePage)x).SearchIndex, "SearchIndex").LazyLoad();
  124.     }
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement