انجام عملیات CRUD با استفاده از روش Code First در Entity Framework
شنبه 8 آبان 1395در این مقاله ، طرز کار عملیات CRUD با استفاده از روش Code First در EF را شرح خواهیم داد . ما این عملیات را در فضای Consoleانجام خواهیم داد .
معرفی :
Entity Framework یک ORM میباشد ، که با استفاده از اشیا با دامنه مشخص به ما در کار با داده های مرتبط با برنامه کمک میکند . برای کار با این داده ها ، EF سه راه را پیشنهاد میدهد :
1. روش Code First
2. روش Database First
3. روش Model First
در این مقاله ما از روش اول یعنی ، Code First استفاده خواهیم کرد .
فضای برنامه :
ابتدا ، یک پروژه Console Application ایجاد کنید . سپس به Referenceهای آن با استفاده از Manage NuGet
منابع مربوط به Entity Framework را به پروژه اضافه کنید .

ما از نسخه Entity Framework 6.1.3 استفاده میکنیم .
یک domain class ایجاد میکنیم :
نام آن را Authur.cs می گذاریم و مشخصه های زیر را در آن قرار میدهیم :
using System;
using System.ComponentModel.DataAnnotations;
namespace CRUD_CodeFirst
{
public class Author
{
[Key]
public int AuthorID { get; set; }
public string AuthorName { get; set; }
public string BookTitle { get; set; }
public DateTime PublicationDate { get; set; }
}
}
این ، domain class ما است .
یک کلاس Context ایجاد میکنیم :
روش Code First همچنین نیازمند یک کلاس Context می باشد که از DbContext مشتق می شود . یک نمونه از DbContext یک ترکیب از Unit Of Work و Repository Pattern را نشان میدهد . DbContext از نظر مفهومی همانند ObjectContext میباشد .
خب ، به سراغ ایجاد کلاس دیگری به نام AuthurContext.cs میرویم و کدهای زیر را در آن قرار میدهیم :
using System.Data.Entity;
namespace CRUD_CodeFirst
{
public class AuthorContext : DbContext
{
public AuthorContext() : base("dbConnectionString")
{
Database.SetInitializer<AuthorContext>(new CreateDatabaseIfNotExists<AuthorContext>());
}
public DbSet<Author> Authors { get; set; }
}
}
یک Connection String در App.config قرار میدهیم :
app.config را باز کنید و کد زیر را در آن قرار دهید ، توجه داشته باشید که کد زیر را باید ویرایش کنید و مشخصات پایگاه داده خود را به آن اضافه کنید .
<connectionStrings>
<add name="dbConnectionString" connectionString="Data Source=yourdatasource;Initial Catalog=AuthorDB;User ID=youdbuserid;Password=yourdbpassword;pooling=false;MultipleActiveResultSets=True;pooling=false;" providerName="System.Data.SqlClient" />
</connectionStrings>
نمای کلی فایل config بصورت زیر خواهد بود :
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="dbConnectionString" connectionString="Data Source=yourdatasource;Initial Catalog=AuthorDB;User ID=youdbuserid;Password=yourdbpassword;pooling=false;MultipleActiveResultSets=True;pooling=false;" providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<entityFramework>
<!--<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">-->
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
تقریبا کار به اتمام رسیده و ما فقط باید کدهای مربوط به عملیات CRUD را اضافه کنیم :
نوشتن کدهای عملیات CRUD در فایل Program.cs :
ابتدا کدهای مربوط inserting را مینویسیم :
using System;
namespace CRUD_CodeFirst
{
class Program
{
static void Main(string[] args)
{
//Insert into Author table
using (var context = new AuthorContext())
{
for (int i = 0; i < 10; i++)
{
Author objAuthor = new Author() { AuthorName = "Author" + i, BookTitle = "Book" + i, PublicationDate = DateTime.Now.AddMonths(i) };
context.Authors.Add(objAuthor);
context.SaveChanges();
}
}
}
}
}
تکه کد بالا ، چگونگی ایجاد و اضافه کردن یک Authur را به AuthurDB نمایش میدهد . پیش از آن ما مجموعه از Authurها را تحت عنوان یک مشخصه در کلاس AuthurContext تعریف کردیم .
public DbSet<Author> Authors { get; set; }
ما نمونه ای از Authur را به این مجموعه اضافه کردیم سپس متد SaveChange را برای ثبت تغییرات در پایگاه داده فراخوانی کردیم :
نتیجه را در زیر مشاهده میکنید :

در مرحله بعد ، کدهای مربوط به بازیابی اطلاعات مینویسیم :
//select records
using (var context = new AuthorContext())
{
context
.Authors
.ToList()
.ForEach
(
a => Console.WriteLine("AuthorId={0} AuthorName={1} BookTitle={2} PublicationDate={3}", a.AuthorID, a.AuthorName, a.BookTitle, a.PublicationDate.ToString("dd/mm/yyyy"))
);
}
نتیجه را در زیر مشاهده میکنید :

تکه کد بعدی ، کدهای مربوط بروزرسانی کردن داده ها است :
//Update into Author table
using (var context = new AuthorContext())
{
Author objAuthor = new Author() { AuthorID = 5, AuthorName = "Barnamenevisan Team", BookTitle = "CRUD using Code First Approach", PublicationDate = DateTime.Now };
context.Authors.Add(objAuthor);
context.Entry(objAuthor).State = EntityState.Modified;
context.SaveChanges();
}
خروجی آن به صورت زیر خواهد بود :

آخرین تکه کد مربوط به حذف یک رکورد است :
//Delete an Author
using (var context = new AuthorContext())
{
int authorID = 7;
var author = context.Authors.Find(authorID); //specify the AuthodId
context.Authors.Remove(author); //removes the entity from the Authors Entities/Collections
context.SaveChanges();
}
ابتدا ما نیاز داریم که Authur مورد نظر را پیدا کنیم ، سپس آن را با استفاده از متد Remove از مجموعه حذف کنیم و در آخر با متد SaveChange تغییرات را ثبت کنیم :
خروجی را در زیر مشاهده میکنید :

در آخر کلاس Program بصورت زیر خواهد بود :
using System;
using System.Data.Entity;
using System.Linq;
namespace CRUD_CodeFirst
{
class Program
{
static void Main(string[] args)
{
//Insert into Author table
using (var context = new AuthorContext())
{
for (int i = 0; i < 10; i++)
{
Author objAuthor = new Author() { AuthorName = "Author" + i, BookTitle = "Book" + i, PublicationDate = DateTime.Now.AddMonths(i) };
context.Authors.Add(objAuthor);
context.SaveChanges();
}
}
//Select Author records
using (var context = new AuthorContext())
{
context
.Authors
.ToList()
.ForEach
(
a => Console.WriteLine("AuthorId={0} AuthorName={1} BookTitle={2} PublicationDate={3}", a.AuthorID, a.AuthorName, a.BookTitle, a.PublicationDate.ToString("dd/mm/yyyy"))
);
}
//Update into Author table
using (var context = new AuthorContext())
{
Author objAuthor = new Author() { AuthorID = 5, AuthorName = "RNA Team", BookTitle = "CRUD using Code First Approach", PublicationDate = DateTime.Now };
context.Authors.Add(objAuthor);
context.Entry(objAuthor).State = EntityState.Modified;
context.SaveChanges();
}
//Delete an Author
using (var context = new AuthorContext())
{
int authorID = 7;
var author = context.Authors.Find(authorID); //specify the AuthodId
context.Authors.Remove(author); //removes the entity from the Authors Entities/Collections
context.SaveChanges();
}
Console.ReadKey();
}
}
}
نتیجه گیری :
خب ، در این مقاله ما چگونگی کارکرد از روش Code First در EF را آموختیم . امیدواریم که مفید واقع شده باشد .
- C#.net
- 3k بازدید
- 4 تشکر