گزارش گیری پویای Entity Framework
جمعه 8 آبان 1394در Entity framework 6.1 می توان از metadata به منظور آشکار کردن اطلاعات دیتابیس استفاده کرد . در این مقاله قصد داریم نشان دهیم چگونه می توان به راحتی گزارش های پویا بر اساس EF metadata ها ایجاد کرد .
در Entity framework 6.1 می توان از متا دیتاها به منظور آشکار کردن اطلاعات دیتابیس استفاده کرد . در این مقاله قصد داریم نشان دهیم چگونه می توان به راحتی گزارش های پویا بر اساس EF metadata ها ایجاد کرد .
ایده اصلی از EF Mapping اطلاعات درمورد جداول و ستونهای مورد نیاز و سپس ساختن کوئری های SQL که اطلاعات مورد نیاز مشتری را برمیگرداند جمع آوری شد.
مزیت اصلی این روش آن است که :
. جدایی بین گزارش و ساختمان دیتابیس است.
. استفاده مجدد از Code ، اطلاعات درباره دیتابیس از Entity framework mapping گرفته خواهد شد.
. راه آسان برای گسترش گزارش
در اینجا یک کتابخانه کوچک ساخته ایم که از روش توضیح داده شده استفاده میکند و به سادگی با گزارش های پویا کار میکند. از این کتابخانه می توانید درون پروژه خود استفاده کنید .
Entity framework خود را تنظیم کنید. برای این پروژه از یک دیتابیس ساده و کوچک استفاده میکنیم که شامل اطلاعاتی درباره دانش آموزان مدرسه می شود.
از کد زیر استفاده کنید .
public class Student { [Key] public int StudentId { get; set; } public string FirstName { get; set; } //some code removed for brevity... } public class SchoolDbContext : DbContext { public DbSet<Student> Students { get; set; } //some code removed for brevit
دیتابیس به صورت زیر می باشد.
برای هر گزارش باید روشن کنیم که چه ستونهایی مورد نیاز است.
public class StudentsReportTemplate : ReportTemplate { ///some code removed for brevity... public override IEnumerable<IReportColumn> ReportColumns { get { return new List<IReportColumn> { StudentTable.Column("First Name", x => x.FirstName), StudentTable.Column("Last Name", x => x.LastName), StudentTable.Column("Phone", x => x.Phone), StudentTable.Column("Home Adress", x => x.HomeAdress), new AverageScore(queryExtractor, StudentTable).Column("Average Score"), new MinimumScore(queryExtractor, StudentTable).Column("Minimum Score"), new MaximumScore(queryExtractor, StudentTable).Column("Maximum Score"), new Age(StudentTable).Column("Age"), new Subjects(queryExtractor, StudentTable).Column("Subjects") }; } } public override IReportDataSource ReportDataSource { get { return StudentTable.GetReportDataSource(); } } }
هر خط نشان می دهد یکی از ستونهای گزارش را نشان می دهد .
اگر بخواهید گزارش فقط یک ستون داشته باشد، کوئری sql به صورت زیر خواهد بود. به طور مثال برای First Name:
SELECT s.FirstName FROM [dbo].[Students] AS s
بعد از آنکه قالب گزارش را تنظیم کردیم می توانیم مدل گزارش (Report Model) را از آن ایجاد کنیم.
Hide Copy Code StudentsReportTemplate template = new StudentsReportTemplate(...); //Report Template create IReportModel object which do not depend from concrete report template. IReportModel reportModel = template.CreateReport();
به منظور گرفتن اطلاعات گزارش مشخص میکنیم که کدام ستونها و فیلترها را می خواهیم در گزارش ببینیم.
var filters = new IReportFilter[0]; var columns = new IReportColumn[] { new ReportColumn { Title = "First Name"} } var data = reportModel.Get(columns, filters)
خروجی به صورت زیر می باشد.
می توانید با انتخاب فیلترها گزارش مورد نظر خود را بیابید .
- ASP.net
- 2k بازدید
- 6 تشکر