using System; using Castle.ActiveRecord; using Castle.ActiveRecord.Queries; using NetCoders.Helpers; namespace NetCoders.NFSCars.Model.Article { [ActiveRecord("Articles")] public class Article : ActiveRecordBase
{ #region Properties / Methods private int _articleId; private User.User _author; private ArticleCategory _category; private string _title; private string _body; private string _bodyParsed; private DateTime _postDateTime; [PrimaryKey(PrimaryKeyType.Native, "ArticleID")] public int ArticleID { get { return _articleId; } set { _articleId = value; } } [BelongsTo("AuthorUserID", NotNull = true, Update = false)] public User.User Author { get { return _author; } set { _author = value; } } [BelongsTo("CategoryID", NotNull = true)] public ArticleCategory Category { get { return _category; } set { _category = value; } } [Property("Title", NotNull = true)] public string Title { get { return _title; } set { _title = value; } } [Property("Body", ColumnType = "StringClob", SqlType = "Text", NotNull = true)] public string Body { get { return _body; } set { _body = value; } } [Property("BodyParsed", ColumnType = "StringClob", SqlType = "Text", NotNull = true)] public string BodyParsed { get { return _bodyParsed; } set { _bodyParsed = value; } } [Property("PostDateTime", NotNull = true, Update = false)] public DateTime PostDateTime { get { return _postDateTime; } set { _postDateTime = value; } } #endregion #region FindAll public static ListHelper
FindAll(int pageIndex, int pageSize) { SimpleQuery
query = new SimpleQuery
(@" FROM Article a ORDER BY a.PostDateTime DESC"); if (pageIndex <= 0) { pageIndex = 1; } int start = (pageIndex * pageSize) - pageSize; query.SetQueryRange(start, pageSize); ListHelper
articles = new ListHelper
((Article[])ExecuteQuery(query)); articles.TotalItems = CountItems(); return articles; } #endregion #region FindAllByCategory public static ListHelper
FindAllByCategory(string category, int pageIndex, int pageSize) { SimpleQuery
query = new SimpleQuery
(@" FROM Article a WHERE a.Category.Name = :category ORDER BY a.PostDateTime DESC"); query.SetParameter("category", category); if (pageIndex <= 0) { pageIndex = 1; } int start = (pageIndex * pageSize) - pageSize; query.SetQueryRange(start, pageSize); ListHelper
articles = new ListHelper
((Article[])ExecuteQuery(query)); articles.TotalItems = CountItems(); return articles; } #endregion #region CountItems public static int CountItems() { return CountItems(null, null); } public static int CountItems(string filter, params object[] parameters) { string queryString = null; if (filter != null && parameters != null) { queryString = " WHERE " + string.Format(filter, parameters); } ScalarQuery query = new ScalarQuery(typeof(Article), @"SELECT COUNT(*) FROM Article a" + queryString); return int.Parse(ExecuteQuery(query).ToString()); } #endregion } }