در نوشته Data Annotation در Entity Framework – بخش یکم چندین ویژگی Data Annotation از فضای نام System.ComponentModel.DataAnnotations را آموزش دادیم. در این نوشته می خواهیم ویژگی های فضای نام System.ComponentModel.DataAnnotations.Schema را آموزش دهیم که شامل پیاده سازی کلید بیرونی (خارجی – Foriegn Key) و ستون های به هم آمیخته (Composit) می شود.

ویژگی های فضای نام System.ComponentModel.DataAnnotations.Schema

۱ – ForeignKey Attribute

کلید بیرونی (خارجی) برای پیوند (ارتباط – Relationship) میان دو جدول به کار گرفته می شود. در Data Annotation برای کلید اصلی، ویژگی Key و برای کلید بیرونی ویژگی ForeignKey به کار گرفته می شود. در دو کد زیر، دو کلاس برای جدول های Passport و PassportStamp نوشته شده است. پیوند (رابطه) میان این دو جدول به گونه One-to-Many است، پس نیازی به جدول میانه (Pivot) نداریم.

کلید اصلی کلاس (جدول) Passport شامل دو ویژگی (ستون) PassportNumber و IssueCountry است بنابراین در کلاس (جدول) PassportStamp نیز کلید بیرونی شامل دو ویژگی به نام های PassortNumber و IssueCountry است. همچنین در کلاس PassportCountry دارای کلید اصلی خود به نام StampId است. چون کلید بیرونی به شیوه به هم آمیخته (Composit) از دو ویژگی کلاس است، پس باید بوسیله ویژگی Column و پارامتر Order، نشان دهیم که این دو ویژگی از کلاس، با یکدیگر کلید بیرونی را ایجاد می کنند.

البته نیازی نیست که کلید اصلی و بیرونی هر دو دارای بیش از یک ستون باشند. همچنین هر جدول تنها یک کلید اصلی دارد که این کلید اصلی می تواند شامل تک ستون یا چندین ستون باشد و از آن سو، شمارگان (تعداد) ستون های کلید بیرونی نیز باید برابر با کلید اصلی جدول دیگری باشد. همچنین یک جدول می تواند چندین کلید بیرونی داشته باشد.

۲ – Table و Column

در بخش بالایی و در نوشته پیشین دید که ویژگی Column را برای نشان دادن کلیدهای اصلی و بیرونی به کار برردیم که به شیوه به هم آمیخته (Composit) شامل دو ستون (ویژگی) کلاس بودند. در قواعد Entity Framework نام کلاس Entity به نام جدول و نام هر ویژگی به نام ستون جدول نگاشت داده می شوند. ولی شما می خواهید این قاعده را کنار گذارید و نام های دلخواه خود را به کار ببرید. پس همانند کدهای زیر باید این دو ویژگی را به کار ببرید.

نکته آن که درون کدهای سی شارپ و برای دسترسی به جدول یا ستونی که بالای آن ویژگی های Table و Column را نوشته اید، همچنان باید همان نام ویژگی ها را به کار ببرید. بنابراین در پایگاه داده، دیگر نام جدول و ستون های آن همنام با نام کلاس و ویژگی آن نیست ولی در برنامه نویسی باید همان نام کلاس و ویژگی ها را به کار ببرید. خود Entity Framework چگونگی این نگاشت از سی شارپ به پایگاه داده را می داند و خودکار انجام می دهد.

کد زیر الگوی ویزگی Column را نشان می دهد که دارای دو پارامتر Order و TypeName است. کاربرد Order برای چیدمان نگاشت ویژگی های کلاس در جدول پایگاه داده است. به بیان دیگر، شماره Order درون ویژگی Column بالای هر ویژگی، چیدمان جدول نگاشت داده شده آن در جدول را نشان می دهد. اگر هیچ Order نوشته نشود، پس کلید اصلی بالای چیدمان ستون های جدول است. در کد زیر هر شماره Order بالای ویژگی کلاس، شماره آن را در چیدمان ستون های جدول نشان می دهد.