صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

Entity Framework 4 part ۵

Model’s Supporting Metadata

وقتی شما به مدل نگاه می کنید تنها نمایی جزیی از کار را می بینید ، اکنون شما باید بدانید که در پشت پرده مدل شما چه فایلها و کدهایی ایجاد شده است .برای این کار مطابق مثالهای قبل یک پروژه جدید ایجاد کنید و از بانک اطلاعاتی Northwind  یک مدل از جداول categories  و  products ایجاد می کنیم . مطابق شکل زیر


خوب اگر خاطرتان باشد گفتیم که هر مدل که ایجاد می کنیم محتویات آن در یک فایل .edmx  است .ما اکنون می خواهیم ساختار دقیقتر و جزیی تری از این فایل را بدانیم برای اینکار بر روی فایل مدل خود فرضا فایل Model1.edmx  کلیک راست کنید و از گزینه های باز شده گزینه open with  را انتخاب کنید از پنجره زیر گزینه xml Editor  را انتخاب کنید .



دکمه ok  را کلیک کنید . فایلی در ساختار XML  برای شما باز می شود.



در واقع ساختار بالا یک ساختار فراداده metadata از فایل model1.edmx است . فایل و ساختار Metadata  معمولا یک ساختار معنایی ، تشریح کننده محتوا ، محل نگه داری ، خصوصیات فیزیکی ، نوع و شکل منبع است . در واقع ما اینجا هم چنین فایلی برای مدل داریم .فایل .edmx دارای سه بخش Metadata  است .

1-Store schema definition language  مخفف آن ssdl  : معمولا ما به آن مدل فیزیکی و ذخیره ای از داده های مدل می گوییم

2-Conceptual Schema definition language   مخفف آن csdl  : معمولا ما با آن مدل مفهومی یا ادراکی مدل می گوییم

3-Mapping specification language   مخفف آن MSL  : معمولا مدل Map از ساختار مدل و داده ها است .

اکنون اگر به تصویر بالا دقت کنید تمام عناصر ذکر شده را به ترتیب دربخشهای SSDl content  و CSDL content  و Mapping content  مشاهده می کنید .

 

1-SSDL    مدل فیزیکی :ما  در اینجا ساختار ذخیره ای و فیزیکی مدل را با فرمت Xml  داریم . اگر به این فرمت دقت کنید مهمترین عناصر آن به ترتیب زیر هستند :

1-1-Schema  : اگر دقت کنید در سطر اول ظاهر می شود از فیلدهای اجباری است که مهمترین عنصر آن NameSpace  است که اجباری است و باید باشد و باید به فضای نام Entity  ما اشاره کند .در واقع مفهومی شبیه به همان مفهوم فضای نام Name Space  در کلاسها و کد نویسی دارد.


2-1- EntityType : نشان دهنده اشیا Object  موجود در مدل است . نام هرEntity Type  در آن فضای نام باید منحصر به فرد باشد و تکرار مجاز نیست هر کدام از EntityType  ها نشان دهنده مدلی از جدول در بانک اطلاعاتی است مثلا در این مثال products  نمایش دهنده مجموعه رکوردهای جدول product  از بانک اطلاعاتی است .


property-3-1 : هر کدام از EntitType  های مدل ما یکسری عناصر دارند ، که این عناصر دارای نام و نوع و طول و مقدار کارکتر یا محدوه عددی و مقیاس و تهی پذیر یا خیر می باشد .در واقع اگر بخواهیم تشبیه کنیم ، می توان گفت ما در اینجا با فیلدهای جدول سرو کار داریم .

4-1 - key :

1-4-1  PropertyRef : ما در اینجا فیلدی را مشخص می کنیم که کلید اصلی جدول داده ها یا مدل داده های ما است مثلا اگر در بانک اطلاعاتی Product  فیلد اصلی ProductId  باشد پس مقدار این آیتم هم productId خواهد بود.


Association  -6-1

-1-6-1    End : همانطور که می دانید بانک اطلاعاتی از ارتباطات بین عناصر برخوردار هستند ارتباطاتی مانند ارتباط یک به یک و یک به چند یا چند به چند و.. در آمزشهای قبلی ذکر کردم که عناصر مدل می توانند مانند بانکهای اطلاعاتی باهم ارتباط داشته باشند که از طریق این خصوصیت امکان پذیر است

Associationset  نشان دهنده ارتباط و نام و مشخصات آن و گره End   نشان دهنده راسهای ارتباط بین عناصر است.

referential constraint   : این قسمت در واقع نشان دهنده قیدهای ارتباط است ما می دانیم در هر ارتباط بین عناصر 2 جدول یک کلید اصلی است و کلید دیگر باید کلید خارجی یا ثانویه باشد .


                  principal : نشان دهنده منشا و کلید اصلی ارتباط

                 Dependent      : نشان دهنده کلید ثانویه یک ارتباط بین عناصر است . 

  

8-1- EntityContainer     : به طور کلی در این قسمت ما دو گره Entityset  و Associatioset را داریم .و درواقع ساختاری کلی از منبع داده را برای ما نمایش می دهد


9-1-   EntitySet   : گروهی از EntityType  های منبع داده را نمایش می دهد.


10-1- Associationset  : مجموعه و ساختار کلی ارتباطات را نمایش می دهد

 

بطور کلی بحث در مورد ساختار SSDL بسیار مفصل است اما در این مطلب مختصری برای آشنایی   بیان کردم .

2-CSDL مدل مفهومی یا ادراکی : ما در اینجا می توانیم ادعا کنیم که با یک الگو و ساختاری نمونه برای مدل داده ها سرو کار داریم . ساختار آن بسیار شبیه به ساختار SSDl  است . البته با تغییراتی بیشتر .

تفاوت این دو قسمت بالا زمانی نمایان می شود که ما حالت مدل را انتخاب کنیم ، یعنی اگر ما از بانک اطلاعاتی، مدل را بسازیم در این حالت ما SSDL  را خواهیم داشت . اما اگر یادتان باشد ما حالتی داشتیم که اول مدل را طراحی می کردیم و سپس بر اساس مدل بانک اطلاعاتی را می ساختیم در این حالت ما  فقط محتویات مفهومی و معنایی مدل  CSDL  را خواهیم داشت.


3-MSL  : در واقع حلقه وصل بین SSDL  و CSDL است . به شکل زیر دقت کنید :



    در شکل بالا می بینید که چگونه عمل Map  انجام می شود . مهمترین عناصر  MSL  به شرح زیر است :

1-Mapping  : عنصر ریشه ای می باشد که در برگیرنده تمام آیتمهای MSL  است .

2-EntiyContainerMapping  : در این قسمت نام هر Entitycontainer  موجود در دو بخش SSDL  و CSDL  را شامل می شود در واقع ظرفی ایجاد می کند برای ایجاد ارتباط بین   SSDL EntityContainer  و بخش

CSDL Entitycontainer

3-EntitySetMapping : این بخش نیز ارتباطی ایجاد می کند بین هر بخش Entityset موجود در SSDL  و CSDl

4-   ٍEntityTypeMapping  :  این بخش نیز ارتباطی ایجاد می کند بین EntityType های دو بخش SSDL و CSDL

بحث در مورد SSDL  و CSDL  و MSL  بسیار مفصل است ، تا اینجا بحث را در این بخش خاتمه می دهم اما در این مقاله فهمیدیم که وقتی یک مدل از بانک اطلاعاتی ایجاد می کنیم در پشت صحنه ایجاد یک فایل Metadata  چگونه اطلاعات ساختار بندی می شود.


 

ادامه دارد ...                                                                           

Entity Framework 4 part ۴


نگاهی عمیق تر به Entity Data model

ابتدا از محیط کاری و پنجره های طراحی EDM  صحبت می کنیم . در کار با EDM  4 پنجره از محیط طراحی برای شما بسیار مفید است

1-Designer surface : سطح بصری طراحی می باشد که شما می توانید به کمک آن ساختار و مدل EDM  را ایجاد و یا تغییر دهید.

2-Mapping Detail windows  : پنجره ای برای map  کردن و تغییر در این پنجره شما یک ساختار فیزیکی از عناصر Entity را مشاهده می کنید

3-Toolbox  : جعبه ابزار که برای همه مشخص است و در مقاله قبل با آن بیشتر آشنا شدیم

4-Model Browser Window  : این پنجره ساختاری درختی از مدل مفهومی و منطقی مدل نمایش می دهد .

در شکل زیر این چهار پنجره به تفکیک نمایش داده شده است .


.


 

Entities

برای فهم بهتر entity  باید با چند مفهوم آشنا شویم

Entity Type  : نشان دهنده نوع خاصی از داده ها است مثلا داده ای از نوع سطرهای جدول کارمند Emplyee ، در واقع می توان گفت رکوردهای جدول را نشان می دهند..

Entity Set : یک در برگیرنده یا مجموعه ای از Entity  های واحد .بنابر این Entity  ها را می توان بصورت Entity Set  گروه بندی کرد .در هر Entity set  ما می توانیم چند Entity type  داشته باشیم و هر گروه Entity Set نیز می تواند با یک Entity Set دیگر در ارتباط باشد .

فرض کنیدما 3 نوع Entity Type  به نامهای Salesperson ,SalesOrderHeader,SalesOrderDetail  داریم و دو تا Entity Set داریم که به صورت شکل زیر هستند



دراینجا Entity Set  اول شامل دوتا Entity Type  است .

Scalar Properties  : اگر مقاله های قبلی را مطالعه کرده باشید متوجه شدید که هر Entity Type  دارای مجموعه ای از خصوصیات (Properties  ) می باشد که یکی از آنها Scalar Properties  است . اگر بخواهیم آن را به زبان ساده بیان کنیم باید بگویم که این آیتم در واقع خصوصیتهایی را تعریف می کند که مقادیر رایج متغیرها یعنی عدد ، رشته ، کارکتر و تاریخ و غیره را می پذیرد .به تعبیری دیگر همان فیلدها بانک اطلاعاتی هستند که هر کدام دارای نوع هستند اگر شما یک Entity Type  از مثالهای قبل ایجاد کرده باشید کافیست یکی از خصوصیات را انتخاب کنید و به پنجره Properties  دقت کنید



می بینید هر کدام از فیلدها یا همان خصوصیتهای Entity  ما دارای ویژگیهایی است مانند زیر

 Name  : نام خصوصیت مورد نظر را نمایش می دهد که می توان آن را تغییر داد

Nullable : آیا فیلد مشخص شده مقدار Null  را می پذیرید

Setter : همان خاصیت Set  در تعریف خصوصیات کلاسها که ما در اینجا سطح دسترسی آن را تعریف می کنیم

Getter : همان خاصیت Get  در تعریف خصوصیت فیلد کلاسها که ما در اینجا سطح دسترسی آن را تعریف می کنیم

StoredGenerationPattern : معادل Auto –generated  در بانکهای اطلاعاتی یعنی مقادیر یک فیلد اتوماتیک اضافه می شوند

Type : نوع فید

Default Value: مقدار پیش فرض

Complex Types

حتما تا کنون با ساختارها (structure) سروکار داشته اید . ما ساختاری  تعریف می کردیم که می توانست مجموعه ای از داده های متفاوت را با هم در یک متغیر ساختاری جمع آوری می کرد . مفهموم Complex Types  چیزی شبیه به همان مغیرهای ساختاری است . در وواقع یک متغیر مرکب است .مثلا اگر بخواهید آدرس فردی را با ساختار تلفن – آدرس منزل_ایمیل _شماره موبایل ، ذخیره کنید .باید از یک متغیر مرکب یا همان complex  استفاده کرد . اکنون با مثال نحوه تعریف آن را نشان می دهم .ما در بخش قبل گفتیم که یک Entity  می تواند شامل خصوصیاتی باشد که از نوع متغیرهای متعارف باشد مثلا عددی یا کارکتری و غیره ، اما اگر بخواهیم خصوصیتی پیچیده تر و با نوع مرکب داشته باشیم ، مثلا یک خصوصیت داشته باشیم که از نوع ساختاری یا یک نوع مرکب و پیچیده ، چکار بایدکرد . جواب همان Complex Types

شما باید ابتدا یک آیتم و متغیر از نوع Complex Types  تعریف کنید و پس از آن در Entity  مورد نظرتان یک خصوصیت از نوع Complex Property تعریف کنید که این خصوصیت مرکب بعدا از نوع Complex Types خواهد بود.

فرض کنید پروژه ای که قبلا ایجاد کرده ایم را باز کرده ایم ، به پنجره Model Browser  دقت کنید

همانور که می بینید گزینه Complex Types  را مشاهده می کنید . برای ایجاد آن بر روی Complex Types  کلیک راست کرده و گزینه Create Complex Types را انتخاب کنید .یک آیتم Complex Types  ایجاد می شودنام آن را AddressInfo  می نامیم اکنون بر روی همان آیتم مجددا کلیک راست کنید و گزینه Add  را انتخاب کنید و سپس گزینه Scalar Property را انتخاب کنید .لیستی از انواع برای شما باز می شود



فرض کنید می خواهیم آیتمی تعریف کنیم که آدرس را بصورت شماره تلفن و آدرس ذخیره کند پس 2 قسمت داریم یکی Phone , و دیگری Address است فرض کنیم اولی از نوع عددی و دومی کارکتری پس اولی را بصورت زیر تعریف کنید

Add  ----à Scalar Property --à Int32

و سپس نام آن را phone  وارد کنید برای دومی هم به همان ترتیب با این تفاوت که نوع آن String  است .




اکنون ما یک آیتم complex Types  تعریف کردیم اما ما مشخص نکردیم که این آیتم باید به کدام Entity  ارتباط داشته باشد برای اینکار بر روی یکی از Entity  های مدل فرضا Entity2  کلیک راست کرده و گزینه Complex Types  را انتخاب می کنیم مانند شکل زیر خواهد شد


اکنون به پنجره

propertie مرتبط به این Complexproperty بروید و از قسمت Type  مربوطه آیتم AddressInfo را انتخاب کنید در حقیقت ما اینجا خصوصیتی تعریف کردیم از نوع AddressInfo  که در واقع یک نوع مرکب جدید تعریف شده توسط کاربر است .



ادامه دارد...

Entity Framework 4 part ۳

Model-First Approach

در مطالب قبلی در مورد Entity  و نحوه استفاده از ویزارد برای تولید کلاس در صورت وجود بانک صحبت کردم ، اما امروز می خواهم در مورد حالتی صحبت کنم که ما مدل کلاسها را ترسیم می کنیم و از این مدل می خواهیم بانک اطلاعاتی را ایجاد کنیم ، این ویژگی از جالبترین و مهمترین ویژگیهای اضافه شده در EF4 است که مایکروسافت آن را اضافه کرده است .

مانند مقاله بخش 2 ، یک پروژه تحت ویندوز باز کنید ،از منوی Project  کزینه Add New Item  و سپس گزینه ADO.NET Entity Data Model را انتخاب کنید اما از پنجره ظاهر شده در زیر گزینه empty model را انتخاب کنید


ماژول خالی برای شما ایجاد می شود ، اکنون جعبه ابزار   را باز کنید و ابزار زیر را مشاهده کنید .




ابزارهایی را مشاهده می کنید که مختصرا آنها را توضیح می دهم.

Entity  : به شما اجازه می دهد که یک  Entity  را ایجاد و طراحی کنید

Association : برای تعریف و ایجاد روابط میان دو عنصر Entity

Inheritance  : برای ایجاد رابطه وراثت بین عناصر و کلاسهای Entity

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


اکنون به اولین Entity  ایجاد شده دقت کنید .

. یک properties  دارد با نام Id است علاوه بر آن این خصوصیت یک primary Key  برای این Entity  ایجاد شده است .شما می توانید با انتخاب آن از شکل خصوصیات و پارامترهای آن را عوض کنید .پس از تنظیم پارامترهای دلخواه ، شما می توانید بر حسب نیازتون عناصر دیگری  به Entity   اضافه کنید . برای اینکار کافیست برروی Entity کلیک راست کنید و گزینه Add  را انتخاب کنید .





اگر دقت کنید با دو گزینه scalar property , complex property  مواجه می شویم ، شما نگران نباشید از بخش بعدی یعنی بخش چهارم وارد جزییات خواهیم شد و موارد را به تفصیل شرح خواهم داد .

اکنون شما گزینه scalar property  را انتخاب کنید نام آن را  CustomerFirstName قرار دهید و نوع آن یعنی Type  را از نوع کارکتری یعنی  string  انتخاب کنید و بقیه را مطابق شکل زیر



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

 CustomerLastName (String)

 CustomerAddress (String)

 CustomerCity (String)

 CustomerState (String)

 CustomerZipCode (String)

 CustomerPhone (String)

 ModifyDateTime (DateTime)

سپس یک Entity دیگر ایجاد کنید و عناصر زیر را به آن اضافه کنید

OrderID (int32)

 CustomerID (int32)

 ItemID (int32)

 ModifyDateTime (DateTime)


اکنون ما 2 Entity  داریم ، حالا می خواهیم یک ارتباط بین این 2 برقرار کنیم برای اینکار  از جعبه ابزار Associtation  را انتخاب کنید و سپس از Entity1  فیلد Id  را انتخاب کنید و از Entity2   فیلد customerId  را انتخاب کنید رابطه شما بین این دو فیلد مانند شکل زیر خواهد شد .


اکنون نوبت ایجاد بانک اطلاعاتی از مدول و کلاسهای بالا است . اکنون بر روی فضای خالی از صفحه مازول کلیک راست بزنید و گزینه Generate Database From Model  را انتخاب کنید صفحه زیر نمایش داده می شود .



در اینجا شما باید بانک اطلاعاتی و رشته اتصال را مشخص کنید .دکمه next  را بزنید و به مرحله بعد بروید صفحه ای برای شما نمایش داده می شود که مجموعه دستورات DDl را برای ایجاد این جدولها در بانک اطلاعاتی را بصورت فایلی ذخیره می کند .



دکمه Finish  را کلیک کنید تا فایل مورد نظر شما ایجاد شود که حاوی کدهایی برای ایجاد بانک اطلاعاتی است .یک فایلی با فرمت .sql  خواهد بود ، همانطور که در شکل بالا می بینید .اکنون برای اجرای اسکریپت بالا در فضای خالی از کد اسکریپت کلیک راست کرده و گزینه Execute Sql  را مطابق شکل زیر انتخاب کنید ، اسکریپت شما در بانک اطلاعاتی مشخص شده ایجاد خواهد شد



به بانک اطلاعاتی خودتان بروید تا جدولهای ایجاد شده را مشاهده کنید .


ادامه دارد...

 

نکته : نوشتن آموزش گام به گام در فضای نت سخت است ، آن هم با توجه به مشغله های کاری که دارم ولی تمام تلاشم را بکار می گیرم که این بحث را به نحو مطلوبی آموزش بدهدم