در صورتی که از علاقه مندان 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;
}
}
در کل مطالعه این کتاب به همه علاقه مندان توصیه میشود.D:
0 نظرات:
ارسال یک نظر