مهدی عادلی فر
بنیانگذار توسینسو و برنامه نویس

آموزش استفاده از View در Entity Framework

در بسیاری از موارد در طراحی پایگاه داده ممکن است که ویوهایی را تعریف کنیم. که از خاصیت ویو ها استفاده کنیم. ویوها این خاصیت را دارند با آنها مانند یک جدول بانک اطلاعاتی رفتار می شود در حالی که خود جدول بانک اطلاعاتی نیستند و اطلاعات خود را از جداول دیگر می خوانند. به همین منظور فضایی را از بانک اطلاعاتی اشغال نمی کنند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

مشکلی که در این جا وجود دارد این است که با استفاده از entity framework در حالت عادی به سختی می توان از ویوها استفاده کرد. در این نکته به توضیح استفاده از ویو ها در Entity Framework Code first می پردازیم. برای استفاده از Entity Framework Code first باید کتابخانه های این بسته بر روی پروژه نصب شده باشد که در این آموزش نصب این بسته توضیح داده شده است. پس از این که این بسته بر روی سیستم نصب شد باید با توجه به ویویی که در بانک داریم یک کلاس با توجه به فیلد های آن می سازیم. دقت کنید که همه انواع داده ای باید مطابق با نوع داده ای تعریف شده در ویوی بانک باشد. کد زیر یک مثال برای این مطلب می باشد:

public class v1
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int? GroupId { get; set; }
        public int? UserId { get; set; }
        public decimal? Price { get; set; }
        public int? CustomerId { get; set; }
        public string Date { get; set; }

        public int? FactorNumber { get; set; }
    }

پس از انجام این کار باید باید این کلاس را به context معرفی کنیم و بگوییم که این کلاس باید به کدام ویو نگاشت(map) شود. برای این که Entity Framework بتواند از یک کلاس استفاده کند باید در آن کلاس یک کلید هم معرفی کنیم. به همین منظور یکی از فیلدهای ویو را به عنوان کلید معرفی می کنیم. این فیلد بهتر است که یکی از فیلد هایی باشد که شبیه به کلید است. یعنی این که کلید مورد نظر عددی باشد و تا حد امکان هم یکتا باشد البته اگر یکتا نباشد هم برنامه کار می کند. برنامه زیر این مطلب را شرح می دهد.

 public class Context : DbContext
    {
        public IDbSet<v1> v1
        {
            get { return Set<v1>(); }
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(v1Map.Map());
            base.OnModelCreating(modelBuilder);
        }
    }

    public class v1Map
    {
        public static EntityTypeConfiguration<v1> Map()
        {
            var map = new EntityTypeConfiguration<v1>();
            map.HasKey(v1 => v1.Id);
            map.ToTable("v1");
            return map;
        }
    }

توضیحات بیشتر در باره ی DbContext را در سری آموزش های entity framework ببینید. توجه داشته باشید که کلاس v1Map کلاس مربوط به map کردن می باشد و کلاس اصلی برای کار با بانک اطلاعاتی کلاس context است. این کلاس یک تابع به نام map دارد که هنگام ساخته شدن مدل این تابع صدا زده می شود. در داخل همین تابع به Entity Framework می گوییم که باید این کلاس به تابع به نام v1 نگاشت(map) می شود و یک کلید هم برای آن مشخص شده است. و در نهایت در تابع main برنامه بقیه تنظیمات اتصال به پایگاه داده را مشخص می کنیم و ازآن استفاده می نماییم. کد تابع main در زیر آمده است.

internal class Program
    {
        private static void Main(string[] args)
        {
            var a = new Context();
            a.Database.Connection.ConnectionString = "Data Source=.;Initial Catalog=test;Integrated Security=True";
            a.Database.CreateIfNotExists();
            Console.WriteLine("Hi Itpro.ir User");
            foreach (var source in a.v1.ToList())
            {
                Console.WriteLine(source.Price);
            }
            Console.ReadKey();
        }
    }

همانگونه که در کد بالا دیده می شود بعد از این که Connection String مربوط به بانک اطلاعاتی مشخص شد و به بانک متصل شدیم می توانیم از آن استفاده کنیم. که در این مقاله مقادیر price را در کنسول چاپ می کند. توجه داشته باشید که در این برنامه فقط خواندن اطلاعات از ویو ها مورد بررسی قرار گرفت و برای این که بتوانیم اعمال آپدیت و درج را انجام دهیم باید از stored procedure ها و مفهوم stored procedure mapping در entity framework استفاده کنیم. Itpro باشید.


مهدی عادلی فر
مهدی عادلی فر

بنیانگذار توسینسو و برنامه نویس

مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.

نظرات