شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز
🎯 ثبت نام

Complex Type ها در Entity Framework 6 Designer-نوع داده پیچیده در EF6

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.

 Complex Typeها در Entity Framework 6 Designer

بنا به دلایلی در دنیای واقعی تعداد کنترل ها بر روی data storesها و data feedها کم هست و یا اصلاً هیچ کنترلی وجود ندارد. دلایلی نظیر:

a.     سن سیستم های قدیمی

b.     Feedهای شخص ثالث

c.     سیستم هایی با معماری ضعیف

Entity Framework (EF) یک نگاشت کننده داده های رابطه ای (object-relational) است که باعث می شود توسعه دهندگان .NET بتوانند با استفاده از اشیاء domain-specific با داد های رابطه ای (relational data) کار کنند. با EF دیگر نیازی به خیلی از کدها برای دسترسی به داده نیست. کدهایی که بسیاری از توسعه دهندگان همیشه برای انجام عملیات ساده CRUD می نویسند.

Microsoft ORM solution Entity Framework کمک می کند تا موجودیت ها را با استفاده از رویکرد CodeFirst یا گزینه های طراحی EF به یکدیگر نگاشت کنیم و داده هایمان را به راحتی به برنامه اضافه کنیم.

این مقاله درباره موجودیت هایی است که فعلاً غیر نرمال هستند و اینکه چطور آنها را برای نگهداری و استفاده مجدد در نوع های پیچیده استخراج کنیم.

تعریف مسئله

اکثر مواقع، موجودیت هایی که استفاده می کنیم 3NF نیستند و باید بنا به نیاز برنامه ما بهبود یابند. به احتمال زیاد هم از این موجودیت ها در جاهای مختلفی از پروژه و solution استفاده شده است و باید از یکسری عناصر داده ای در کد های چند فایل اضافه کنیم.

در EF designer با استفاده از ابزارهای بصری (visual tools) می توانیم موارد مشابه را گروه بندی کنیم. همانطور که قبلاً نیز گفته شد، این رویکرد همان رویکرد database first که در اینجا از آن استفاده خواهیم کرد.

راه حل

من از Visual Studio 2015 community edition برای این مقاله استفاده کرده ام. اما مفاهیم درVisual Studio 2013 نیز قابل اجرا است.

مرحله 1: Visual Studio 2015 یا هر نسخه دیگری از آن را باز کنید.

File  و سپس New Project را انتخاب کنید.

                                                                            console application

برای این مثال من console app را انتخاب کردم و نام EmployeeComplexType را بر روی آن گذاشتم.

بر روی پروژه راست کلیک کرده و گزینه Add و سپس New Item را انتخاب کنید.

add new item

نام EmployeeDataModel را وارد کنید.


 

EmployeeDataModel

اولین گزینه، EF designer from database را انتخاب کنید.

  EF designer from Database

انتخاب data connection

Connection String ای با نام EFEmployeeEntities در فایل App.ConFigure اضافه می شود که از آن برای اتصال به SQL Server backend بر روی ماشین محلیمان استفاده می شود.


اتصال به Sql Server

قبلاً یک جدول به نام Employee ایجاد کرده ام و از تمام ستون های آن استفاده می کنم. در شکل زیر جزئیات مشاهده می شوند.

انتخاب جدول

  

در زیر جدول Employee که در بالا انتخاب کرده بودیم، با جزئیات نشان داده شده است.

table design

refactor
مطابق تصویر فوق، با انتخاب فیلدهای تشکیل دهنده نام، از جمله FirstName، Lastname، MiddleName و Salutation، یک Complex Type جدید به نام Name، می سازیم.
بر روی complexProperty کلیک کرده و نام آن را به EmployeeName تغییر می دهیم.

EmployeeName

 

همین کارها را برای فیلدهای مرتبط با آدرس نیز انجام می دهیم. پس از اعمال تغییرات مانند شکل زیر خواهد شد.
در اینجا نتیجه نهایی را پس از اعمال تغییرات مشاهده می کنید. توجه داشته باشید که در صورت عدم مشاهده پنجره Mapping Details، کلیدهای ctrl+2 را فشار دهید و یا در گزینه View، otherwindows و سپس Entity Data Model Mapping Details کلیک کنید.

جزئیات نگاشت Entity Data Model


در زیر قطعه کدی را مشاهده می کنید که در console app نوشته شده است. توجه داشته باشید که هنگام مقدار دهی اولیه به کارمند دوم (name2)، خصوصیات کمی (scalar) مثل MiddleName و salutation حذف شده است. برای addressline2 نیز همین کار را کردیم.

لزومی ندارد حتماً از تمام مقادیر کمی (scalar) که در complex type تعریف کردیم، استفاده کنیم.

var name1 = new Name { FirstName = "John", MiddleName = "M", LastName = "Doe", Salutation = "Jr." }; 

 

var name2 = new Name { FirstName = "Jane", LastName = "Doe" }; 

 

 

var address1 = new Address 

   AddressLine1 = "123 Elm street"

   AddressLine2 = ""

   City = "SanMateo"

   State = "CA"

   ZipCode = "94403" 

}; 

نمی توانیم همزمان تمام complex objectها را null کنیم.

با اجرای کد زیر، خطایی تولید می شود که می گوید: "برای مقدار null-ناپذیر (non nullable) EmployeeAddress، مقدار Null در نظر گرفته شده است."

context.Employees.Add(new Employee { EmployeeName = name1, EmployeeAddress = address1 }); 

context.Employees.Add(new Employee { EmployeeName = name2, EmployeeAddress = null }); 

خروجی نهایی به صورت زیر است:


خروجی نهایی

 
امیدوارم با مطالعه این مقاله با تعریف و استفاده از complex typeها در EF designer آشنا شده باشید.

1394/09/06 3403 1643
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...