مشخصات مقاله
-
591
-
0.0
-
3732
-
0
-
0
آموزش ذخیره Data در زمان اتصال به Data Base با Entity Framework Core
آموزش ذخیره Data در زمان اتصال به Data Base با Entity Framework Core
آموزش ذخیره Data در زمان اتصال به Data Base با Entity Framework Core
EF Core راه های مختلفی برای add، update یا delete کردن Data در Data Base در اختیار می گذارد. یک موجودیت حاوی Data در scalar property هایش براساس EntityState که دارد ، update یا delete می شود.
دو سناریو برای ذخیره Dataی درون یک entity وجود دارد: connected یا disconnected. در سناریوی اول، یک instance از DbContext برای ذخیره و بازیابی entity ها استفاده می شود. در سناریوی دوم اوضاع متفاوت است. در این بخش به نحوه دخیره Data به صورت connected می پردازیم.
شکل زیر عملیات CRUD را در سناریوی connected نشان می دهد:
همان طور که در شکل هم نشان داده شده، پس از فراخوانی تابع DbContext.SaveChanges() ، Entity Framework دستورات INSERT، UPDATE و DELETE را برای entity هایی که EntityState شان Added، Modified و Deleted هستند می سازد و اجرا می کند. در سناریوی connected، یک instance از DbContext همه ی entity ها را در اصطلاحا track می کند و هنگام ساخته شدن، تغیییر و حذف یک entity، EntityState مناسبی برای آن تعیین می کند.
Insert Data (درج در Data Base)
متدهای DbSet.Add و DbContext.Add یک entity جدید به یک context اضافه می کنند که با فراخوانی متد SaveChanges() در Data Base ذخیره می شود.
using (var context = new SchoolContext())
{
var std = new Student()
{
FirstName = "Bill",
LastName = "Gates"
};
context.Students.Add(std);
// or
// context.Add< Student >(std);
context.SaveChanges();
}در مثال بالا، (context.Students.Add(std یک instance جدید از موجودیت Student با EntityState بصورت Added به یک context اضافه می کنند . EF Core متد DbContext.Add را معرفی کرده که کاری دقیقا مشابه DbSet.Add انجام می دهد. پس از این، متد SaveChanges() دستور INSERT زیر را می سازد و در Data Base اجرا می کند:
exec sp_executesql N'SET NOCOUNT ON; INSERT INTO [Students] ( [FirstName], [LastName]) VALUES (@p0, @p1); SELECT [StudentId] FROM [Students] WHERE @@ROWCOUNT = 1 AND [StudentId] = scope_identity();',N '@p0 nvarchar(4000), @p1 nvarchar(4000) ',@p0=N'Bill',@p1=N'Gates' go
Updating Data (آپدیت کردن جدول)
در سناریوی connected، EF Core API همه ی entity های بازیابی شده را توسط context دنبال می کند. وقتی Dataی یک entity را تغییر می دهیم، EF به صورت خودکار EntityState آن را به Modified تغییر می دهد.
using (var context = new SchoolContext())
{
var std = context.Students.First< Student >();
std.FirstName = "Steve";
context.SaveChanges();
}
در مثال بالا، با دستور context.Students.First< student >()، اطلاعات اولین student را از Data Base می گیریم. به محض تغییر دادن FirstName، به طور خودکار context، EntityState آن را به Modified تغییر می دهد چرا که این تغییر درون scope شی context اتفاق افتاده. وقتی متد SaveChanges() را فراخوانی کنیم، دستور Update زیر ساخته و در Data Base اجرا می شود.
exec sp_executesql N'SET NOCOUNT ON; UPDATE [Students] SET [FirstName] = @p0 WHERE [StudentId] = @p1; SELECT @@ROWCOUNT; ',N'@p1 int,@p0 nvarchar(4000)',@p1=1,@p0=N'Steve' Go
در یک دستور Update، EF فقط property هایی را که مقادیرشان تغییر کرده قرار می دهد. در مثال بالا فقط FirstName تغییر کرده، پس دستور Update بالا فقط حاوی ستون FirstName است.
Deleting Data (حذف Data از جدول)
از متدهای DbSet.Remove() و DbContext.Remove() برای حذف یک رکورد از جدول درون Data Base استفاده کنید.
using (var context = new SchoolContext())
{
var std = context.Students.First< Student >();
context.Students.Remove(std);
// or
// context.Remove< Student >(std);
context.SaveChanges();
}
در مثال بالا، (context.Students.Remove(std یا (context.Remove
در بخش کار با Data Base در سناریوی disconnected درمورد سناریوی دوم کار با Data Base برای Update، Delete و Insert صحبت می کنیم.exec sp_executesql N'SET NOCOUNT ON;
DELETE FROM [Students]
WHERE [StudentId] = @p0;
SELECT @@ROWCOUNT;
',N'@p0 int',@p0=1
Go