ably ably برای هدایت شدن به سایت جدید اینجا کلیک کنید

آموزش برنامه نویسی

آموزش برنامه نویسی وب، اندروید، ویندوز , اسکیوال و...
Tell: 0912 097 5516
| Email: Hello@EduOnline.ir

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

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

آموزش 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 این کار را انجام دهید، شاید از این روش هم نیز بهتر باشد.

نظرات (۱)

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

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

موفق باشید
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
up
ما را در گوگل محبوب کنید