"> استفاده از Dapper Contrib در NET Core. | آموزش NET Core. | ام اس پی سافت

استفاده از Contrib در Dapper

Contrib در Dapper

در بخش چهارم میرسیم به استفاده از Contrib در Dapper . تا پایان این مقاله جذاب همراه ما باشید.ببخش های ابتدایی این مقاله را از دست ندید.

میتوانید بخش های قبلی مقاله را در لینک‏ زیر مشاهده کنید.

 

Dapper Contrib چیست؟

Dapper.Contrib یک کتابخانه “Helper” است که در بالای Dapper ساخته شده است ، که می تواند چندین مورد از “quality of life” را به Dapper بیافزاید در غیر این صورت موانع ایجاد شده در Dapper آزار دهنده میشود.

برجسته ترین ، به روزرسانی ها و درج ها با Dapper.Contrib بسیار ساده تر می شوند.

نصب کردن Dapper Contrib

از پنجره کنسول Package Manager می توانید بسته Dapper.Contrib را نصب کنید.

Install-Package Dapper.Contrib

اگر Dapper را قبلاً نصب نکرده باشید ، در ابتدا باید Dapperرا نصب کنید.

توجه داشته باشید شاید مجبور شوید که در مواقعی Dapper را از ابتدا نصب کردید ، نسخه دیگری از نسخه Dapper را استفاده کنید، سپس Contrib دوم.

ساده ترین راه اگر واقعاً مایل به استفاده از Contrib هستید ، حذف مستقیم مرجع Nuget Dapper است ، و به سادگی Contrib را نصب کنید و آن را در نسخه مورد نیاز خود استفاده کنید.

Model Our C# Class For Writes In Dapper Contrib

نکته مهم هنگام استفاده از Dapper Contrib این است که برای مطابقت با مدل database خود به یک مدل سی شارپ نیاز دارید.

باز هم نمی توانم به اندازه کافی stress داشته باشم که این فقط در موارد نوشتن باید مورد استفاده قرار گیرد.

هنگام خواندن داده ها ، تمام نکته استفاده از Dapper این است که شما over-select نکرده اید و بنابراین باید سعی کنید در هر زمان ممکن از DTO استفاده کنید.

از قبل ، مدل سی شارپ خود را آماده داریم:

class Event
{
    public int Id { get; set; }
    public int EventLocationId { get; set; }
    public string EventName { get; set; }
    public DateTime EventDate { get; set; }
    public DateTime DateCreated { get; set; }
}

این همانطور که هست کار می کند ، اما چند نکته وجود دارد که باید توجه داشته باشید.

در مرحله اول ، Dapper Contrib به یک “ID” نیاز دارد تا بتواند یک رکورد را به روز کند.

در مورد ما ، ما یک ویژگی به نام “Id” و Dapper داریم.

Contrib از این کنوانسیون (قرار داد) استفاده می کند و این کلید اصلی ما در جدول است. اما اگر از چیزی مانند “EventId” به عنوان کلید اصلی خود استفاده کنیم ، چه می شود؟ این هم آسان است.

class Event
{
    [Key]
    public int Id { get; set; }
    public int EventLocationId { get; set; }
    public string EventName { get; set; }
    public DateTime EventDate { get; set; }
    public DateTime DateCreated { get; set; }
}

ما فقط ویژگی “کلید” را از کتابخانه Dapper Contrib اضافه می کنیم تا به آن بگوییم که کلید اصلی ما است.

در مرحله بعد ، لازم است که نام کلاس برابر با اسم جدول SQL باشد ، اما به شکل یک plural (جمع) باشد. در مورد ما ، نام کلاس ما Event است و انتظار داریم که جدول ما “Events” باشد.

بنابراین ، چگونه می توانیم بگوییم nope (نه) ، می خواهیم به singular (مفرد) چسبیده باشیم؟

[Table ("Event")]
class Event
{
    public int Id { get; set; }
    public int EventLocationId { get; set; }
    public string EventName { get; set; }
    public DateTime EventDate { get; set; }
    public DateTime DateCreated { get; set; }
}

باز هم ، یک ویژگی دیگر. در حقیقت یک couple دیگر، ویژگی های دیگر نیز وجود دارند که در دسترس هستند ، اما این ها اصلی ترین مواردی هستند که باید سریعا به آن توجه کنید.

درج رکوردها با استفاده از Dapper Contrib

امیدوارم این کارها را آسانتر کند.

using (SqlConnection connection = new SqlConnection(connectionString))
{
    var newEvent = new Event
    {
        EventLocationId = 1,
        EventName = "Contrib Inserted Event",
        EventDate = DateTime.Now.AddDays(1),
        DateCreated = DateTime.UtcNow
    };
    connection.Insert(newEvent);
}

… خیلی عالی! بنابراین ما دوباره به استفاده از این روش “Insert” که Object ما را در بر می گیرد و یک دستور وارد میکند، بازمی گردیم. برخی از آن ها کنترل کامل را از دسترس ما خارج میکند، اما وقتی صحبت یک دستور شود ، چیز زیادی وجود ندارد که بخواهیم هنگام وارد کردن یک دستور مراقب آن باشیم ، بنابراین من از آن خوشحالم.

با استفاده از Dapper Contrib ضبط کنید.

Contrib همچنین دارای این ویژگی عالی است که می تواند با استفاده از ID یک رکورد کامل ظبط کند. از Dapper هم میشود استفاده کرد اما شما باید سعی کنید از انجام “SELECT *” خودداری کنید و در عوض فقط آنچه را که لازم دارید بدست آورید.

اما ما بعداً از آن استفاده خواهیم کرد، می خواستم این را نشان دهم.

using (SqlConnection connection = new SqlConnection(connectionString))
{
    var eventId = 1;
    var myEvent = connection.Get<Event>(eventId);
}

از آنجا که ما نوع دیگری از “Events” را درخواست می کنیم ، می داند از چه جدولی است و بر اساس key Id اصلی آن Objectرا از ما گرفته و به دست می آورد.
به روزرسانی رکورد ها با استفاده از Dapper Contrib
Contrib همچنین می تواند به روزرسانی کند..

اول از همه ، بدیهی است که می توانیم Objectخود را با IDدریافت کنیم ، آن را به روز کنیم ، سپس آنرا بنویسیم:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    var eventId = 1;
    var myEvent = connection.Get<Event>(eventId);
    myEvent.EventName = "New Name";
    connection.Update(myEvent);
}

بنابراین مشارکت در “به روز رسانی” داده ها به ما کمک میکند اما مشکل اینجاست که ما SQL واقعی را که اجرا شده است بررسی می کنیم:

exec sp_executesql N'update Event set [EventLocationId] = @EventLocationId, [EventName] = @EventName, [EventDate] = @EventDate, [DateCreated] = @DateCreated where [Id] = @Id',
N'@DateCreated datetime,@EventDate datetime,@EventLocationId int,@EventName nvarchar(4000),@Id int',@DateCreated='2019-01-20 02:11:46.453',@EventDate='2019-01-11 00:00:00',@EventLocationId=1,@EventName=N'New Name',@Id=1

بنابراین اساساً همه زمینه ها را به روز می کند.

به همین دلیل ما باید قبل از بروزرسانی ، رکورد را توسط Id بدست آوریم زیرا باید اطمینان حاصل کنیم که تمام زمینه های دیگر (نه فقط موردی که می خواهیم آن را بروز کنیم) به درستی تنظیم شده اند.

در حال حاضر Dapper Contrib یک dirty tracking دارد ، اما IMO همان بی معنی است که شما هنوز هم برای شناسایی ردیابی موجودیت در وهله اول باید شیء کامل را با استفاده از شناسه دریافت کنید ، و نکته اصلی این است که ما از این مسئله غافل نیستیم.

در حال حاضر Dapper.Contrib ردیابی نامناسبی دارد، اما IMO همان بی معنی (pointless) است که هنوز لازم است در وهله اول برای ردیابی هویت (identity) ، Object کامل را با IDدریافت کنید، تمام نکته این است که ما نظارت نمی کنیم

به نظر من ، به روزرسانی ها به جای استفاده از Contrib ، کاندیداهای خوبی برای انجام SQL سفارشی هستند ، اما این فقط احساس شخصی من است!

رکورد را با استفاده از Dapper Contrib حذف کنید

حذف کردن آن در واقع بسیار ساده است. تا زمانی که Dapper.Contrib می داند کلید اصلی شما چیست ، می تواند بر اساس آن سوابق را حذف کند.

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Delete(new Event { Id = 5 });
}

صادقانه بگویم ، این نحو تا حدی مرا آزار می دهد زیرا بدون هیچ دلیلی در حال ایجاد یک object هستیم! آیا عبور از یک پارامتر Int ساده تر نخواهد بود؟

  • پسورد: www.mspsoft.com
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.