درخواست های ارتباط
جستجو تنظیمات
لیست دوستان من

ایجاد SP های CUD برای جداول بانک اطلاعاتی در Entity Framework

0 نظرات
در Entity Framework نسخه 6 قابلیتی وجود دارد که می توان برای Entity های مدل در بانک اطلاعاتی SP های مربوط به عملیا های Create و Update و Delete را ایجاد کرد. برای مثال، مدل زیر را در نظر بگیرید:

public class Customer
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class SampleContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }
}

در حالت عادی، Entity Framework برای عملیات های CUD در بانک اطلاعاتی دستورات SQL را ایجاد کرده و اجرا می کند، برای ایجاد SP های مورد نظر کافیست در زمان نوشتن Map مربوط به یک Entity از متد MapToStoredProcedures به صورت زیر استفاده کنید:

public class SampleContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>().MapToStoredProcedures();
        base.OnModelCreating(modelBuilder);
    }
}

با نوشتن کد بالا و اجرای دستور زیر که بانک اطلاعاتی را ایجاد می کند، خواهیم دید که SP های مربوط به عملیات های درج، به روزرسانی و حذف ایجاد شده اند و EF برای عملیات های CUD از این SP ها استفاده می کند. برای شخصی سازی SP ها مانند تغییر نام یا تغییر نام پارامتر ها کافیست به صورت زیر عمل کنیم:

public class SampleContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>().MapToStoredProcedures(sp =>
        {
            sp.Insert(map => map.HasName("Customer_Insert").Parameter(c => c.FirstName, "first_name").Parameter(c => c.LastName, "last_name");
            sp.Update(map => map.HasName("Customer_Update"));
            sp.Delete(map => map.HasName("Customer_Delete"));
        });
        base.OnModelCreating(modelBuilder);
    }
}

کد بالا عملیات Map را برای SP های مدل Customer انجام می دهد. اما فرض کنید که تعداد Entity های ما زیاد باشد، نوشتن Map به صورت بالا برای تک تک Entity ها زمان بر خواهد بود، برای این مشکل می توان عملیات ایجاد SP ها را به صورت گروهی برای کلیه Entity ها به صورت زیر انجام داد:

public class SampleContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Types().Configure(t => t.MapToStoredProcedures());
        base.OnModelCreating(modelBuilder);
    }
}

کد بالا برای کلیه موجودیت ها در بانک اطلاعاتی SP های CUD را ایجاد می کند. نحوه Customize کردن SP ها هم به صورت زیر خواهد بود:

public class SampleContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Types().Configure(t => t.MapToStoredProcedures(sp=>
        {
            sp.Insert(map => map.HasName(t.ClrType.Name + "_Insert"));
            sp.Update(map => map.HasName(t.ClrType.Name + "_Update"));
            sp.Delete(map => map.HasName(t.ClrType.Name + "_Delete"));
        }));
        base.OnModelCreating(modelBuilder);
    }
}

دقت کنید که برای انتخاب نام SP از ClrType استفاده شده، این پارامتر یک شئ از نوع Type بر میگرداند که بوسیله آن می توان به نام کلاس Entity دسترسی داشت. با کد بالا برای کلیه موجودیت ها، SP ها ایجاد خواهد شد.

نویسنده: حسین احمدی
منبع: ITpro
نظرات
هیچ نظری ارسال نشده است

برای ارسال نظر ابتدا به سایت وارد شوید

arrow