گزارش گیری پویای Entity Framework

جمعه 8 آبان 1394

در Entity framework 6.1 می توان از metadata به منظور آشکار کردن اطلاعات دیتابیس استفاده کرد . در این مقاله قصد داریم نشان دهیم چگونه می توان به راحتی گزارش های پویا بر اساس EF metadata ها ایجاد کرد .

گزارش گیری  پویای Entity Framework

در 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)

خروجی به صورت زیر می باشد.

می توانید با انتخاب فیلترها گزارش مورد نظر خود را بیابید .

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید