var url = new UrlHelper(HtmlHelper.ViewContext.RequestContext);
Error 1 An object reference is required for the non-static field, method, or property 'System.Web.Mvc.HtmlHelper.ViewContext.get'
var url = new UrlHelper(HtmlHelper.ViewContext.RequestContext);
[ServiceContract] public interface IBookService { [OperationContract] int GetCountOfBook(); }
[ServiceBehavior(IncludeExceptionDetailInFaults = true)] public class BookService : IBookService { public int GetCountOfBook() { return 10; } }
class Program { static void Main(string[] args) { ServiceHost host = new ServiceHost(typeof(BookService)); var binding = new BasicHttpBinding(); host.AddServiceEndpoint(typeof(IBookService), binding, "http://localhost/BookService"); host.Open(); Console.Write("BookService host"); Console.ReadKey(); } }
static void Main(string[] args) { Thread.Sleep(2000); BasicHttpBinding binding = new BasicHttpBinding(); ChannelFactory<IBookService> channel = new ChannelFactory<IBookService>(binding, new EndpointAddress("http://localhost/BookService")); Console.WriteLine("Count of book: {0}", channel.CreateChannel().GetCountOfBook()); Console.ReadKey(); }
تا اینجا هیچ گونه اعتبار سنجی انجام نشد. برای پیاده سازی اعتبار سنجی باید یک سری تنظیمات بر روی Binding و Hosting سمت سرور و البته کلاینت بر قرار شود. فایل Program پروزه Service را باز نمایید و محتویات آن را به صورت زیر تغییر دهید:
static void Main(string[] args) { ServiceHost host = new ServiceHost(typeof(BookService)); var binding = new BasicHttpBinding(); binding.Security = new BasicHttpSecurity(); binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = System.ServiceModel.Security.UserNamePasswordValidationMode.Custom; host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustomUserNamePasswordValidator(); host.AddServiceEndpoint(typeof(IBookService), binding, "http://localhost/BookService"); host.Open(); Console.Write("BookService host"); Console.ReadKey(); }
public class CustomUserNamePasswordValidator : UserNamePasswordValidator { public override void Validate(string userName, string password) { if (userName != "Masoud" || password != "Pakdel") throw new SecurityException("Incorrect userName or password"); } }
این خطا از آن جا ناشی میشود که تنظیمات کلاینت و سرور از نظر امنیتی با هم تناسب ندارد. در نتیجه باید تنظیمات Binding کلاینت و سرور یکی شود. برای این کار کد زیر را به فایل Program سمت کلاینت اضافه میکنیم:
static void Main(string[] args) { Thread.Sleep(2000); BasicHttpBinding binding = new BasicHttpBinding(); binding.Security = new BasicHttpSecurity(); binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; ChannelFactory<IBookService> channel = new ChannelFactory<IBookService>(binding, new EndpointAddress("http://localhost/BookService")); channel.Credentials.UserName.UserName = "WrongUserName"; channel.Credentials.UserName.Password = "WrongPassword";
Console.WriteLine("Count of book: {0}", channel.CreateChannel().GetCountOfBook()); Console.ReadKey(); }
channel.Credentials.UserName.UserName = "WrongUserName"; channel.Credentials.UserName.Password = "WrongPassword";
public class SiteUser { public int Id { get; set; } public string Name { get; set; } public virtual ICollection<Address> Addresses { get; set; } public virtual ICollection<Email> Emails { get; set; } } public class Email { public int Id { get; set; } public string Text { get; set; } [ForeignKey("SiteUserId")] public virtual SiteUser SiteUser { get; set; } public int SiteUserId { get; set; } } public class Address { public int Id { get; set; } public string Text { get; set; } [ForeignKey("SiteUserId")] public virtual SiteUser SiteUser { get; set; } public int SiteUserId { get; set; } }
public class UserViewModel { public int Id { get; set; } public string Name { get; set; } public ICollection<Address> Addresses { get; set; } public ICollection<Email> Emails { get; set; } }
var user1 = context.Users.Project().To<UserViewModel>().FirstOrDefault();
public class TestProfile : Profile { protected override void Configure() { this.CreateMap<SiteUser, UserViewModel>() .ForMember(dest => dest.Addresses, opt => opt.ExplicitExpansion()) .ForMember(dest => dest.Emails, opt => opt.ExplicitExpansion()); } public override string ProfileName { get { return this.GetType().Name; } } }
using (var context = new MyContext()) { var user1 = context.Users .Project() .To<UserViewModel>(parameters: new { }, membersToExpand: viewModel => viewModel.Emails) .FirstOrDefault(); if (user1 != null) { foreach (var email in user1.Emails) { Console.WriteLine(email.Text); } } }
using System.Collections.Generic; using System.Drawing; using iTextSharp.text; using PdfRpt.Core.Contracts; namespace PdfReportSamples.HexDump { public class GrayTemplate : ITableTemplate { public HorizontalAlignment HeaderHorizontalAlignment { get { return HorizontalAlignment.Center; } } public BaseColor AlternatingRowBackgroundColor { get { return new BaseColor(Color.WhiteSmoke); } } public BaseColor CellBorderColor { get { return new BaseColor(Color.LightGray); } } public IList<BaseColor> HeaderBackgroundColor { get { return new List<BaseColor> { new BaseColor(ColorTranslator.FromHtml("#990000")), new BaseColor(ColorTranslator.FromHtml("#e80000")) }; } } public BaseColor RowBackgroundColor { get { return null; } } public IList<BaseColor> PreviousPageSummaryRowBackgroundColor { get { return new List<BaseColor> { new BaseColor(Color.LightSkyBlue) }; } } public IList<BaseColor> SummaryRowBackgroundColor { get { return new List<BaseColor> { new BaseColor(Color.LightSteelBlue) }; } } public IList<BaseColor> PageSummaryRowBackgroundColor { get { return new List<BaseColor> { new BaseColor(Color.Yellow) }; } } public BaseColor AlternatingRowFontColor { get { return new BaseColor(ColorTranslator.FromHtml("#333333")); } } public BaseColor HeaderFontColor { get { return new BaseColor(Color.White); } } public BaseColor RowFontColor { get { return new BaseColor(ColorTranslator.FromHtml("#333333")); } } public BaseColor PreviousPageSummaryRowFontColor { get { return new BaseColor(Color.Black); } } public BaseColor SummaryRowFontColor { get { return new BaseColor(Color.Black); } } public BaseColor PageSummaryRowFontColor { get { return new BaseColor(Color.Black); } } public bool ShowGridLines { get { return true; } } } }
.MainTableTemplate(template => { template.CustomTemplate(new GrayTemplate()); })
using System; using System.Collections; using System.Linq; namespace PdfReportSamples.HexDump { public static class PrintHex { public static char ToSafeAscii(this int b) { if (b >= 32 && b <= 126) { return (char)b; } return '_'; } public static IEnumerable HexDump(this byte[] data) { int bytesPerLine = 16; return data .Select((c, i) => new { Char = c, Chunk = i / bytesPerLine }) .GroupBy(c => c.Chunk) .Select(g => new { Hex = g.Select(c => String.Format("{0:X2} ", c.Char)).Aggregate((s, i) => s + i), Chars = g.Select(c => ToSafeAscii(c.Char).ToString()).Aggregate((s, i) => s + i) }) .Select((s, i) => new { Offset = String.Format("{0:d6}", i * bytesPerLine), Hex = s.Hex, Chars = s.Chars }); } } }
using System; using System.Text; using PdfRpt.Core.Contracts; using PdfRpt.FluentInterface; namespace PdfReportSamples.HexDump { public class HexDumpPdfReport { public IPdfReportData CreatePdfReport() { return new PdfReport().DocumentPreferences(doc => { doc.RunDirection(PdfRunDirection.LeftToRight); doc.Orientation(PageOrientation.Portrait); doc.PageSize(PdfPageSize.A4); doc.DocumentMetadata(new DocumentMetadata { Author = "Vahid", Application = "PdfRpt", Keywords = "Test", Subject = "Test Rpt", Title = "Test" }); }) .DefaultFonts(fonts => { fonts.Path(Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\COUR.ttf", Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\tahoma.TTF"); }) .PagesFooter(footer => { footer.DefaultFooter(DateTime.Now.ToString("MM/dd/yyyy")); }) .PagesHeader(header => { header.DefaultHeader(defaultHeader => { defaultHeader.ImagePath(AppPath.ApplicationPath + "\\Images\\01.png"); defaultHeader.Message("Hex Dump"); }); }) .MainTableTemplate(template => { template.CustomTemplate(new GrayTemplate()); }) .MainTablePreferences(table => { table.ColumnsWidthsType(TableColumnWidthType.Relative); }) .MainTableDataSource(dataSource => { var data = Encoding.UTF8.GetBytes("The quick brown fox jumps over the lazy dog."); var list = data.HexDump(); dataSource.AnonymousTypeList(list); }) .MainTableColumns(columns => { columns.AddColumn(column => { column.PropertyName("Offset"); column.CellsHorizontalAlignment(HorizontalAlignment.Center); column.IsVisible(true); column.Order(0); column.Width(0.5f); column.HeaderCell("Offset"); }); columns.AddColumn(column => { column.PropertyName("Hex"); column.CellsHorizontalAlignment(HorizontalAlignment.Left); column.IsVisible(true); column.Order(1); column.Width(2.5f); column.HeaderCell("Hex"); }); columns.AddColumn(column => { column.PropertyName("Chars"); column.CellsHorizontalAlignment(HorizontalAlignment.Left); column.IsVisible(true); column.Order(2); column.Width(1f); column.HeaderCell("Chars"); }); }) .MainTableEvents(events => { events.DataSourceIsEmpty(message: "There is no data available to display."); }) .Generate(data => data.AsPdfFile(AppPath.ApplicationPath + "\\Pdf\\HexDumpSampleRpt.pdf")); } } }
.MainTableDataSource(dataSource => { var data = Encoding.UTF8.GetBytes("The quick brown fox jumps over the lazy dog."); var list = data.HexDump(); dataSource.AnonymousTypeList(list); })
column.PropertyName("Offset"); //... column.PropertyName("Hex"); //... column.PropertyName("Chars");
.Select(x => new { OrderInfo = x.OrderInfoData })
column.PropertyName("OrderInfo.Price");
namespace CS11Tests; public class StaticAbstractMembers { public static void Test() { var sum = AddAll(new[] { 1, 2, 3, 4 }); Console.WriteLine(sum); } private static int AddAll(int[] values) { int result = 0; foreach (var value in values) { result += value; } return result; } }
var sum = AddAll(new[] { 1, 2, 3, 4, 0.68 });
Argument 1: cannot convert from 'double[]' to 'int[]' [CS11Tests]csharp(CS1503)
private static T AddAll<T>(T[] values) { T result = 0; foreach (var value in values) { result += value; } return result; }
T result = T.Zero;
using System.Numerics; namespace CS11Tests; public class StaticAbstractMembers { public static void Test() { //var sum = AddAll(new[] { 1, 2, 3, 4 }); var sum = AddAll(new[] { 1, 2, 3, 4, 0.68 }); Console.WriteLine(sum); } private static T AddAll<T>(T[] values) where T : INumber<T> { T result = T.Zero; foreach (var value in values) { result += value; } return result; } }
abstract static TSelf One { get; } abstract static TSelf Zero { get; }
abstract static TResult operator +(TSelf left, TOther right);
public interface ISport { bool IsTeamSport(); } public class Swimming : ISport { public bool IsTeamSport() => false; } public class Football : ISport { public bool IsTeamSport() => true; }
public class StaticAbstractMembers { public static void Display<T>(T sport) where T : ISport { Console.WriteLine("Is Team Sport:" + sport.IsTeamSport()); } }
Display(new Football());
public interface ISport { static abstract bool IsTeamSport(); } public class Swimming : ISport { public static bool IsTeamSport() => false; } public class Football : ISport { public static bool IsTeamSport() => true; }
public class StaticAbstractMembers { public static void Display<T>() where T : ISport { Console.WriteLine("Is Team Sport:" + T.IsTeamSport()); } }
[HttpGet] public JsonResult Get(int id) { return Json(repository.Find(id), JsonRequestBehavior.AllowGet); }
A circular reference was detected while serializing an object of type ‘System.Data.Entity.DynamicProxies.ItemCategory_A79…’
public class Item { public int Id { get; set; } [ForeignKey] public int ItemId { get; set; } public string Name { get; set; } public ICollection<Item> Items { get; set; } }
[HttpGet] public JsonResult List() { var data = repository.AllIncluding(itemcategory => itemcategory.Items); var collection = data.Select(x => new { id = x.Id, name = x.Name, items = x.Items.Select(item => new { id=item.Id, name = item.Name }) }); return Json(collection, JsonRequestBehavior.AllowGet); }
private static void LoadEntities(Assembly asm, DbModelBuilder modelBuilder, string nameSpace) { var entityTypes = asm.GetTypes() .Where(type => type.BaseType != null && type.Namespace == nameSpace && type.BaseType == null) .ToList(); entityTypes.ForEach(modelBuilder.RegisterEntityType); }
public interface ILogActionService { void Log(string data); } public class LogAttribute : ActionFilterAttribute { public ILogActionService LogActionService { get; set; } public override void OnActionExecuted(ActionExecutedContext filterContext) { LogActionService.Log("......data......"); base.OnActionExecuted(filterContext); } }
[Log] public ActionResult Index() {}
using StructureMap; using System.Collections.Generic; using System.Web.Mvc; namespace DI06.CustomFilters { public class StructureMapFilterProvider : FilterAttributeFilterProvider { private readonly IContainer _container; public StructureMapFilterProvider(IContainer container) { _container = container; } public override IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { var filters = base.GetFilters(controllerContext, actionDescriptor); foreach (var filter in filters) { _container.BuildUp(filter.Instance); yield return filter; } } } }
//Using the custom StructureMapFilterProvider var filterProvider = FilterProviders.Providers.Single(provider => provider is FilterAttributeFilterProvider); FilterProviders.Providers.Remove(filterProvider); FilterProviders.Providers.Add(SmObjectFactory.Container.GetInstance<StructureMapFilterProvider>());
namespace DI06.IocConfig { public static class SmObjectFactory { private static readonly Lazy<Container> _containerBuilder = new Lazy<Container>(defaultContainer, LazyThreadSafetyMode.ExecutionAndPublication); public static IContainer Container { get { return _containerBuilder.Value; } } private static Container defaultContainer() { return new Container(x => { x.For<ILogActionService>().Use<LogActionService>(); x.Policies.SetAllProperties(y => { y.OfType<ILogActionService>(); }); }); } } }
public class User { public int Id { get; set; } public string Name { get; set; } public virtual ICollection<BlogPost> BlogPosts { get; set; } } public class BlogPost { public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } [ForeignKey("UserId")] public virtual User User { get; set; } public int UserId { get; set; } }
var data = context.BlogPosts.ToList();
var data = context.BlogPosts.ToList();
var list = context.BlogPosts.Select(x => x.Content).Skip(15).Take(15).ToList();
foreach (var post in context.BlogPosts) { Console.WriteLine(post.User.Name); }
foreach (var post in context.BlogPosts.Include(x=>x.User))
var data = context.BlogPosts.ToList();
var data = context.BlogPosts.AsNoTracking().Skip(15).Take(15).ToList();
private void problem5MoreThan1ConnectionPerRequest() { using (var context = new MyContext()) { var count = context.BlogPosts.ToList(); } }
DataContext = from user in context.Users where user.Id>10 select user;
var list = context.BlogPosts.Where(x => x.Content.Contains("test"))
در این قسمت مدلهای مربوط به بخش انجمن را تکمیل کرده و همچنین سیستم نظرسنجی را نیز بررسی خواهیم کرد.
همکاران این قسمت:
سلمان معروفی
سید مجبتی حسینی
/// <summary> /// Represents The Post of Forum /// </summary> public class ForumPost : AuditBaseEntity { #region Ctor /// <summary> /// create one instance of <see cref="ForumPost"/> /// </summary> public ForumPost() { CreatedOn = DateTime.Now; } #endregion #region Properties /// <summary> /// gets or sets body of this post /// </summary> public virtual string Body { get; set; } /// <summary> /// gets or sets Count of this post's reports /// </summary> public virtual int ReportsCount { get; set; } /// <summary> /// gets or sets information of User-Agent /// </summary> public virtual string Agent { get; set; } /// <summary> /// gets or sets rating values /// <remarks>is a complex type</remarks> /// </summary> public virtual Rating Rating { get; set; } /// <summary> /// gets or sets author's ip address /// </summary> public virtual string CreatorIp { get; set; } /// <summary> /// gets or sets status of this post /// </summary> public virtual ForumPostStatus Status { get; set; } #endregion #region NavigationProperties /// <summary> /// gets or sets ParentPost of this post /// </summary> public virtual ForumPost Reply { get; set; } /// <summary> /// gets or sets ParentPost's Id of this post /// </summary> public virtual long? ReplyId { get; set; } /// <summary> /// gets or sets /// </summary> public virtual ICollection<ForumPost> Children { get; set; } /// <summary> /// gets or sets Topic That Associated with this Post /// </summary> public virtual ForumTopic Topic { get; set; } /// <summary> /// gets or sets Id of Topic That Associated with this Post /// </summary> public virtual long TopicId { get; set; } /// <summary> /// get or sets Histories of this Post's Updates /// </summary> public virtual ICollection<ForumPostHistory> Histories { get; set; } /// <summary> /// gets or sets Forum that this post created in it . used for retrive posts count /// </summary> public virtual Forum Forum { get; set; } /// <summary> /// gets or sets id of Forum that this post created in it . used for retrive posts count /// </summary> public virtual long ForumId { get; set; } #endregion } public enum ForumPostStatus { /* 0 - approved, 1 - pending, 2 - spam, -1 - trash */ [Display(Name = "تأیید شده")] Approved = 0, [Display(Name = "در انتظار بررسی")] Pending = 1, [Display(Name = "جفنگ")] Spam = 2, [Display(Name = "زباله دان")] Trash = -1 }
مدل بالا مشخص کنندهی پستهایی که در پاسخ به تاپیکها ارسال میشوند، میباشد. ساختار درختی آن به منظور امکان پاسخ به پستها در نظر گرفته شده است. در هر تاپیک چندین پست ارسال میشود که اولین پست ارسال شده، همان محتوای اصلی تاپیک میباشد. بدین منظور خصوصیت Topic را در مدل بالا تعریف کردهایم. برای این پستهای ارسالی امکان امتیاز دهی و اخطار دادن نیز خواهیم داشت که به ترتیب خصوصیات Rating و ReportsCount (بحث شده در مقالات قبل) را در مدل بالا تعریف کردهایم. خصوصیت Status به منظور اعمال مدیریتی در نظر گرفته شده است که از نوع ForumPostStatus میباشد و در بالا تعریف آن نیز آمده است.
نکته : خصوصیتی از نوع مدل Forum نیز در مدل بالا تعریف شده است. هدف از آن افزایش سرعت ویرایش خصوصیات ApprovedPostsCount و UnApprovedPostsCount موجود در مدل Forum میباشد. در واقع هنگام درج پست جدید یا حذف پستی و یا ... ، لازم است خصوصیات مذکور به روز شوند.
علاوه بر این موارد ، لازم است تاریخچهی تغییرات پستهای ارسالی را هم نگهداری کرد تا در صورت نیاز به آنها استناد کنیم. از طرفی پستهای ارسالی را میتوان چندین بار ویرایش کرد. به همین دلیل خصوصیت Histories را که لیستی از مدل ForumPostHistory میباشد، در مدل بالا تعریف کردهایم.
/// <summary> /// Represents History Of Post's Updates /// </summary> public class ForumPostHistory { #region Ctor /// <summary> /// create one instance of <see cref="ForumPostHistory"/> /// </summary> public ForumPostHistory() { Id = SequentialGuidGenerator.NewSequentialGuid(); CreatedOn = DateTime.Now; } #endregion #region Properties /// <summary> /// gets or sets Identifier of this history /// </summary> public virtual Guid Id { get; set; } /// <summary> /// gets or sets Reason of update /// </summary> public virtual string Reason { get; set; } /// <summary> /// gets or sets DateTime that this record added /// </summary> public virtual DateTime CreatedOn { get; set; } /// <summary> /// gets or sets body of this post /// </summary> public virtual string Body { get; set; } #endregion #region NavigationProperties /// <summary> /// gets or sets Post /// </summary> public virtual ForumPost Post { get; set; } /// <summary> /// gets or sets Id Of Post /// </summary> public virtual long PostId { get; set; } /// <summary> /// gets or sets User that modified this Record /// </summary> public virtual User Modifier { get; set; } /// <summary> /// gets or sets if of User that modified this Record /// </summary> public virtual long ModifierId { get; set; } #endregion }
اگر خصوصیت ModifyLocked مربوط به مدل ForumPost که آن را از کلاس پایه AuditBaseEntity به ارث برده است، دارای مقدار true باشد، این امکان وجود خواهد داشت تا بتوان پست مورد نظر را ویرایش کرده و اطلاعات قبلی، در قالب یک رکورد در جدول حاصل از مدل بالا ثبت شوند.
public class ForumTracker { #region Ctor /// <summary> /// create one instance of <see cref="ForumTracker"/> /// </summary> public ForumTracker() { LastMarkedOn = DateTime.Now; } #endregion #region Properties /// <summary> /// gets or sets DateTime Of Las Visit by User /// </summary> public virtual DateTime LastMarkedOn { get; set; } #endregion #region NavigationProperties /// <summary> /// gets or sets Forum that Tracked /// </summary> public virtual Forum Forum { get; set; } /// <summary> /// gets or sets Id of Forum tath Tracked /// </summary> public virtual long ForumId { get; set; } /// <summary> /// gets or sets User that tracked The forum /// </summary> public virtual User Tracker { get; set; } /// <summary> /// gets or sets Id Of User that Tracked the forum /// </summary> public virtual long TrackerId { get; set; } #endregion } public class ForumTopicTracker { #region Ctor /// <summary> /// create one instance of <see cref="ForumTopicTracker"/> /// </summary> public ForumTopicTracker() { LastVisitedOn = DateTime.Now; } #endregion #region Properties /// <summary> /// gets or sets DateTime Of Las Visit by User /// </summary> public virtual DateTime LastVisitedOn { get; set; } #endregion #region NavigationProperties /// <summary> /// gets or sets topc that Tracked /// </summary> public virtual ForumTopic Topic { get; set; } /// <summary> /// gets or sets Id of topic that Tracked /// </summary> public virtual long TopicId { get; set; } /// <summary> /// gets or sets User that tracked The topic /// </summary> public virtual User Tracker { get; set; } /// <summary> /// gets or sets Id Of User that Tracked the topic /// </summary> public virtual long TrackerId { get; set; } /// <summary> /// gets or sets Forum /// </summary> public virtual Forum Forum { get; set; } /// <summary> /// gets or sets Identifier of Forum . used for delete /// </summary> public virtual long ForumId { get; set; } #endregion }
از مدل ForumTopicTracker هم برای مشخص کردن اینکه کاربر کدام تاپیک را و در چه تاریخی آخرین بار مشاهده کرده است، کمک میگیریم. برای این منظور از خصوصیت LastVisitedOn استفاده میشود.
البته نیاز است هنگام واکشی انجمنها و تاپیکها، یکسری بررسیهایی را بر اساس این جداول انجام داد که تشریح این بررسیها را قصد دارم هنگام پیاده سازی سیستم انجام دهم.
این قسمت از کار کمی پیچیده است و برای خودم نیز چالش داشت. سعی کردم انجمنهای سورس باز PHP را بررسی کنم تا در نهایت به تحلیل بالا دست یافتم. مدلهای ارائه شده انجمن تا این قسمت، نیازهای مورد نظر ما را برآورده خواهند کرد.
public class Poll : BaseContent { #region Ctor /// <summary> /// create one instance of <see cref="Poll"/> /// </summary> public Poll() { Rating = new Rating(); PublishedOn = DateTime.Now; } #endregion #region Properties /// <summary> /// gets or set Date that this Poll will Expire /// </summary> public virtual DateTime? ExpireOn { get; set; } /// <summary> ///indicating this poll allow to select multi item /// </summary> public virtual bool IsMultiSelect { get; set; } /// <summary> /// gets or sets Count of this poll's votes /// </summary> public virtual long VotesCount { get; set; } /// <summary> /// indicate this Poll is approved by admin if Poll.Moderate==true /// </summary> public virtual bool IsApproved { get; set; } #endregion #region NavigationProperties /// <summary> /// get or set comments of this poll /// </summary> public virtual ICollection<PollComment> Comments { get; set; } /// <summary> /// get or set Options Of Poll For selection /// </summary> public virtual ICollection<PollOption> Options { get; set; } /// <summary> /// get or set Users List That vote for this poll /// </summary> public virtual ICollection<User> Voters { get; set; } #endregion }
public class PollOption { #region Properties /// <summary> /// gets or sets identifier of this polloption /// </summary> public virtual long Id { get; set; } /// <summary> /// gets or sets Title of this polloption /// </summary> public virtual string Title { get; set; } /// <summary> /// gets or sets count of votes /// </summary> public virtual long VotesCount { get; set; } /// <summary> /// gets or sets Description of this Option for more details /// </summary> public virtual string Description { get; set; } #endregion #region NavigationProperties /// <summary> /// gets or sets the poll that assosiated with this Polloption /// </summary> public virtual Poll Poll { get; set; } /// <summary> /// gets or sets the id of poll that assosiated with this Polloption /// </summary> public virtual long PollId { get; set; } #endregion }
public class PollComment : BaseComment { #region Ctor public PollComment() { CreatedOn = DateTime.Now; Rating = new Rating(); } #endregion #region NavigationProperties /// <summary> /// gets or sets body of blog poll's comment /// </summary> public virtual long? ReplyId { get; set; } /// <summary> /// gets or sets body of blog poll's comment /// </summary> public virtual PollComment Reply { get; set; } /// <summary> /// gets or sets body of blog poll's comment /// </summary> public virtual ICollection<PollComment> Children { get; set; } /// <summary> /// gets or sets poll that this comment sent to it /// </summary> public virtual Poll Poll { get; set; } /// <summary> /// gets or sets poll'Id that this comment sent to it /// </summary> public virtual long PollId { get; set; } #endregion }