انجام عملیات CRUD با استفاده از روش Code First در Entity Framework

شنبه 8 آبان 1395

در این مقاله ، طرز کار عملیات CRUD با استفاده از روش Code First در EF را شرح خواهیم داد . ما این عملیات را در فضای Consoleانجام خواهیم داد .

انجام عملیات CRUD با استفاده از  روش Code First در Entity Framework

معرفی :
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 را آموختیم . امیدواریم که مفید واقع شده باشد .

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 4 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید