Entity Framework و برنامه نویسی چند لایه

در صورتی که از علاقه مندان ORM ها و بخصوص Entity framework باشید، مطمئنا برنامه نویسی چند لایه یکی از دغدغه های ذهنی شما است، در این پست و چند پست آتی قصد داریم با هم به بررسی و پیاده سازی یک برنامه چند لایه که در آن از Entity Framework استفاده شده بپردازیم.
از امکاناتی که در نسخه 4 به Entity Framework اضافه شد، POCO بود. به کمک این امکان جدید، پیاده سازی برنامه های چند لایه بسیار ساده تر از نسخه پیشین این ORM شده است. در قسمت اول با هم این امکان جدید را بررسی میکنیم و در قسمت های آتی به نحوه پیاده سازی برنامه چندلایه میپردازیم.
قدم اول ایجاد پایگاه داده ای است که قصد کار کردن با آن را داریم. برای این کار یک دیتابیس با 2 جدول افراد و آدرس ها را ایجاد میکنیم.
CREATE TABLE Person
    (
      PersonId INT PRIMARY KEY
                   IDENTITY(1, 1) ,
      FirstName NVARCHAR(50) NOT NULL ,
      LastName NVARCHAR(50) NOT NULL,
    )
CREATE TABLE [Address]
    (
      AddressId INT PRIMARY KEY
                    IDENTITY(1, 1) ,
      City NVARCHAR(50) ,
      Street1 NVARCHAR(50) ,
      Street2 NVARCHAR(50) ,
      PostalCode NVARCHAR(50) ,
      PersonId INT NOT NULL
                   REFERENCES Person ( PersonId )
    )
بعد از ایجاد دیتابیس نوبت به ایجاد پروژه میرسد.
ابتدا یک سلوشن جدید از نوع Console application ایجاد کنید.
در مرحله بعد گزینه Add->New Item->ADO.NET Entity Data Model را انتخاب کنید و مراحل ایجاد Model را طی کنید. بعد از طی کردن مراحل باید مدل به شکل زیر باشد.
بر روی صفحه مدل راست کلیک کنید و از مدل Properties بگیرید، و مقدار خاصیت Code generation strategy را برابر با None قرار دهید.

سپس دو کلاس با نام های Address و Person ایجاد کنید و تمامی خاصیت هایی که در دو کلاسی که در مدل آمده به آن اضافه کنید. نام های خاصیت ها و جنس آنها باید با نام و جنس خاصیت های موجود در مدل یکسان باشد. برای Navigation Properties هم باید خاصیت ها را تعریف کنید. مانند دو کلاس پایین:

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
namespace  YourNamespace
{
public  class  Person 
{
public  int  PersonId { get ; set ; }
public  string  FirstName { get ; set ; }
public  string  LastName { get ; set ; }
public  ICollection <Address> Addresses { get ; set ; }
}
}


using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
namespace  Chapter13SimplePOCO
{
public  class  Address 
{
public  int  AddressId { get ; set ; }
public  string  Street1 { get ; set ; }
public  string  Street2 { get ; set ; }
public  string  City { get ; set ; }
public  string  PostalCode { get ; set ; }
        #region  FKs and Reference properties/value objects
public  int  PersonId { get ; set ; }
public  Person Person { get ; set ; }
        #endregion 
}
}
تا اینجای کار ما کلاس های خود را ایجاد کرده ایم ولی این کلاس ها هیچ اطلاعی از چگونگی ذخیره شدن و خوانده شدن از دیتابیس در اختیار ندارند. برای این منظور کلاسی با نام Entities میسازیم و از ObjectContext ارث برسی میکنیم. و خاصیت ها و سازنده را مانند کد زیر به این کلاس اضافه میکنیم.

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Data.Objects;
namespace  TestEntityPoco
{
public  class  Entities  : ObjectContext 
{
private  ObjectSet <Person> _Pesons;
private  ObjectSet <Address > _addresses;
public  Entities()
: base ("name=CnnName" , "EntitiName" )
{
_Pesons = CreateObjectSet<Contact>();
_addresses = CreateObjectSet<Address >();
}
public  ObjectSet <Contact> Person
{
get 
{
return  _Pesons;
}
}
public  ObjectSet <Address > Addresses
{
get 
{
return  _addresses;
}
}
}
}
حال تمامی کاری که ما باید انجام میدادیم، به پایان رسیده است. کافی است از این کلاس ها استفاده کنیم.
static  void  Main(string [] args)
{
using  (Entities context = new  Entities())
{
var query = from c in  context.Person.Include("Addresses" ) select c;
var contactList = query.ToList();
int  contactCount = contactList.Count;
Person firstContact = contactList.Where(c => c.Addresses.Any()).First();
int  addressCount = firstContact.Addresses.Count;
}
}
کار ما در اینجا به پایان رسید. برای اطلاعات بیشتر میتوانید به فصل 13 از کتاب Oreilly Programming Entity Framework مراجعه کنید.
در کل مطالعه این کتاب به همه علاقه مندان توصیه میشود.D:

0 نظرات: