طراحی یک مدل از روی EDMX

طراحی یک مدل از روی EDMX

بسم الله الرحمن الرحیم

آموزش asp.net mvc

 بنده شخصا از روش  Code First در تولید وب سایت های MVC استفاده می کنم. ولی شروع فراگیریم در ارتباط با MVC به صورت روش معمولی یا همان روش طراحی پایگاه داده با SQL و سپس اضافه کردن مدل مربوطه به پروژه و... بود. برخی از دوستان از همین روش هنوز برای طراحی پروژه های MVC استفاده می کنند، به همین دلیل با مشکلاتی مواجه می شوند (البته هر روشی مزایا و معایب خود دارد در این بخش قصد ندارم در خصوص مزایا و معایب روش ها صحبت کنم بلکه مقصود ارائه راه حل در مورد مشکلات است). یکی از مشکلاتی که با آن مواجه خواهیم شد بحث DataAnnotations و Metadata هایی است که شما برای ساخت یک View سفارشی کد نویسی می کنید. خوب هر بار که شما پایگاه داده خود را تغییر دهید و بخواهید به هر دلیلی مجددا از پایگاه داده خود Model ها را مجددا ایجاد کنید تمامی کد نویسی شما از بین خواهد رفت.

برای حل این مشکل کافی است که یک کلاس Partial تعریف نمایید و در آن فیلدهای خود را در آن بنویسید و سپس یک کلاس برای نگهداری Metadata تعریف نمایید، به این کلاس ها Buddy می گویند.

بسم الله الرحمن الرحیم

آموزش asp.net mvc

 بنده شخصا از روش  Code First در تولید وب سایت های MVC استفاده می کنم. ولی شروع فراگیریم در ارتباط با MVC به صورت روش معمولی یا همان روش طراحی پایگاه داده با SQL و سپس اضافه کردن مدل مربوطه به پروژه و... بود. برخی از دوستان از همین روش هنوز برای طراحی پروژه های MVC استفاده می کنند، به همین دلیل با مشکلاتی مواجه می شوند (البته هر روشی مزایا و معایب خود دارد در این بخش قصد ندارم در خصوص مزایا و معایب روش ها صحبت کنم بلکه مقصود ارائه راه حل در مورد مشکلات است). یکی از مشکلاتی که با آن مواجه خواهیم شد بحث DataAnnotations و Metadata هایی است که شما برای ساخت یک View سفارشی کد نویسی می کنید. خوب هر بار که شما پایگاه داده خود را تغییر دهید و بخواهید به هر دلیلی مجددا از پایگاه داده خود Model ها را مجددا ایجاد کنید تمامی کد نویسی شما از بین خواهد رفت.

برای حل این مشکل کافی است که یک کلاس Partial تعریف نمایید و در آن فیلدهای خود را در آن بنویسید و سپس یک کلاس برای نگهداری Metadata تعریف نمایید، به این کلاس ها Buddy می گویند.

مثال: ابتدا کلاس اصلی که توسط ORM ساخته شده است را می بینید

public partial class User
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string NationalCode { get; set; }
        public string WebAdderss { get; set; }
    }

خوب ما هیچ کاری را بر روی این کلاس انجام نمی دهیم. نکته، خود مایکروسافت این کلاس را نیز به صورت partial تعریف کرده است!!

حال باید کلاس Buddy خود را که می خواهیم Metadata را در آن ذخیره کنیم ایجاد نماییم. کلاس ما به این صورت است:

public class BuddyUser
    {
        [ScaffoldColumn(true)]
        public int Id { get; set; }
        [DataType(DataType.Url)]
        public string WebAdderss { get; set; }
    }

حال باید یک کلاس را برای ارتباط این دو کلاس یک کلاس جدید تعریف نماییم. این کلاس به صورت زیر است:

[MetadataType(typeof(BuddyUser))]
    public partial class User
    {
    }

در تعریف این کلاس باید چند نکته را مد نظر قرارداد این کلاس باید مشابه کلاس اصلی تعریف شود یعنی هم به صورت partial و هم با نام کلاس اصلی User تطابق داشته باشد.

حال می توانید Scaffolding را به راحتی و بدون نگرانی بر روی کلاس ها ایجاد کنید.

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

نظرات

  • Hannah Martinez
    شیما
    دو شنبه 11 دی 1278 - 0:00

    سلام ممنون از مطلب خوبتون
    فقط یک سوال وقتی که فایل edmx ایجاد میشود که نمیتونیم یک کلاس هم نام همان کلاس برای ارتباط کلاس  buddy  و کلاس orm ایجا کنیم؟ داخل همان پوشه مدل باید ایجاد شود؟

    • Judith Bell
      پاسخ
      اسماعیلشیدایی
      دو شنبه 11 دی 1278 - 0:00

      با عرض سلام خدمت شما

      منظور شما متوجه نشدم، یک آموزش جدید برای همین موضوع نیز بر روی وب سایت قرار داده ام می توانید از آن نیز کمک بگیرید.

      موفق باشید

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس