در این پست از وبسایت پرووید در رابطه با درج داده در دیتابیس با استفاده از EF Core در روش Disconnected Scenario #3 صحبت خواهیم کرد. تکنولوژی Entity Framework Core نسل بعدی Entity Framework است که توسط مایکروسافت معرفی شده است.

در قسمت قبلی از این آموزش در رابطه با درج کردن related data ها در Entity Framework Core در disconnected scenario صحبت کردیم.

درج کردن چندین رکورد در Entity Framework Core در disconnected scenario

در Entity Framework Core می توانیم با استفاده از متدهای DbContext.AddRange و DbSet.AddRange چندین entity را به صورت یکجا به context اضافه کنیم. این موضوع باعث می شود که مجبور نباشیم که متد DbContext.Add را چندین بار صدا بزنیم. ضمناً overload های مختلفی برای این متد وجود دارند که در جدول زیر مشاهده می شوند. اگر مفهوم overload برای یک متد را نمیدانید توصیه می کنیم از بسته ی آموزش ویدئویی شی گرایی در سی شارپ وبسایت پرووید استفاده کنید.

بسته ی آموزش ویدئویی معماری نرم افزار در Entity Framework Core

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی معماری نرم افزار در Entity Framework Core دیدن کنید.

کد زیر نحوه ی اضافه کردن یک لیست از Student ها را به context نشان می دهد. این کار با استفاده از متد AddRange انجام شده است.

var studentList = new List<Student>() {
    new Student(){ Name = "Bill" },
    new Student(){ Name = "Steve" }
};

using (var context = new SchoolContext())
{
    context.AddRange(studentList);
    context.SaveChanges();
}

این کد باعث insert شدن دو رکورد جدید به جدول Students می شود. علاوه بر این، می توانید لیستی از entity هایی که همجنس نیستند را نیز به context اضافه کنید. این موضوع در کد زیر نشان داده شده است.

var std1 = new Student(){ Name = "Bill" };

var std2 = new Student(){ Name = "Steve" };

var computer = new Course() { CourseName = "Computer Science" };

var entityList = new List<Object>() {
    std1,
    std2,
    computer
};

using (var context = new SchoolContext())
{                
    context.AddRange(entityList);

    // or 
    // context.AddRange(std1, std2, computer);

    context.SaveChanges();
}

در کدی که در قسمت بالا مشاهده می کنید entityList یک لیست جنریک با type parameter ی از نوع object است. برای یادگیری بهتر generic ها و collection ها از بسته ی آموزش ویدئویی Collection ها در سی شارپ از وبسایت پرووید استفاده کنید. خب، لیست entityList می تواند حاوی هر object ای از هر data type ای باشد. پس از آن متد AddRange باعث اضافه شدن تمامی entity ها به context شده و طبیعتاً در زمان صدا زدن متد SaveChanges دستور INSERT مناسبی برای درج کردن این entity ها ساخته و بر روی دیتابیس اجرا می شود.

exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [Courses] ([CourseName], [Description])
VALUES (@p0, @p1);
SELECT [CourseId]
FROM [Courses]
WHERE @@ROWCOUNT = 1 AND [CourseId] = scope_identity();

DECLARE @inserted1 TABLE ([StudentId] int, [_Position] [int]);
MERGE [Students] USING (
VALUES (@p2, 0),
(@p3, 1)) AS i ([Name], _Position) ON 1=0
WHEN NOT MATCHED THEN
INSERT ([Name])
VALUES (i.[Name])
OUTPUT INSERTED.[StudentId], i._Position
INTO @inserted1;

SELECT [t].[StudentId] FROM [Students] t
INNER JOIN @inserted1 i ON ([t].[StudentId] = [i].[StudentId])
ORDER BY [i].[_Position];
',N'@p0 nvarchar(4000),@p1 nvarchar(4000),@p2 nvarchar(4000),@p3 nvarchar(4000)',
@p0=N'Computer Science',@p1=NULL,@p2=N'Steve',@p3=N'Bill'
go

موضوع بسیار مهمی که قصد داریم به آن اشاره کنیم عملکرد بسیار عالی Entity Framework Core برای افزایش performance برنامه در اجرا کردن چنین دستورات SQL است. در واقع همانطور که در قسمت بالا مشاهده می کنید، Entity Framework Core تمامی این دستور INSERT را در یک round trip تک به دیتابیس انجام می دهد.

بسته ی آموزش ویدئویی نکات طلایی Entity Framework برای برنامه های تجاری

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی نکات طلایی Entity Framework برای برنامه های تجاری دیدن کنید.

برای یادگیری هر چه بهتر مباحث مربوط به Entity Framework Core توصیه می کنیم از بسته ی آموزش ویدئویی شروع به کار با Entity Framework Core و بسته ی آموزش ویدئویی شروع به کار با Entity Framework Core 2.0 استفاده کنید.

در قسمت بعدی از این آموزش در رابطه با درج کردن رکورد ها در Entity Framework Core در disconnected scenario با استفاده از DbSet صحبت خواهیم کرد.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *