Entity Framework入門教程(6)--- 在線場景中保存數據


在線場景中保存數據

在線場景中保存實體數據是一項相當容易的任務,因為使用的是同一個context,這個context會自動跟蹤所有實體發生的更改。

下圖說明了在線場景中的CUD(創建,更新,刪除)操作。


EF在調用context.SaveChange方法時,根據EntityState進行添加、修改或刪除實體實例,並執行INSERT,UPDATE和DELETE語句。在線場景中,context跟蹤所有實體的實例,EntityState無論何時創建,修改或刪除實體,它都會自動為每個實體設置適當的實例。

1.插入數據

使用DbSet.Add方法將新實體添加到上下文(context),調用context.SaveChanges()方法時在數據庫中插入新記錄。

using (var context = new SchoolDBEntities())
{
    var std = new Student()
    {
        FirstName = "Bill",
        LastName = "Gates"
    };
    context.Students.Add(std);

    context.SaveChanges();
}

在上面的示例中,context.Students.Add(std)將新創建的Student實體實例,這個新實例的EntityState 為Added。調用context.SaveChanges()方法時數據庫構建並執行以下INSERT語句。

exec sp_executesql N'INSERT [dbo].[Students]([FirstName], [LastName])
VALUES (@0, @1)
SELECT [StudentId]
FROM [dbo].[Students]
WHERE @@ROWCOUNT > 0 AND [StudentId] = scope_identity()',N
''@0 nvarchar(max) ,@1 nvarchar(max) ',@0=N'Bill',@1=N'Gates'
go

2.更新數據

在線場景中,EF API會跟蹤上下文中所有實體。因此,在編輯實體數據時,EF會自動標記EntityState為Modified,在調用SaveChanges()方法時在數據庫中生成並執行更新的語句。

using (var context = new SchoolDBEntities())
{
    var std = context.Students.First<Student>(); 
    std.FirstName = "Steve";
    context.SaveChanges();
}

我們使用從數據庫中檢索第一個學生:context.Students.First<student>()。一旦我們修改了FirstName,上下文就會將實例的EntityState設置為Modified。當我們調用該SaveChanges()方法時,會在數據庫中構建並執行以下Update語句。

exec sp_executesql N'UPDATE [dbo].[Students]
SET [FirstName] = @0
WHERE ([StudentId] = @1)',
N'@0 nvarchar(max) ,@1 int',@0=N'Steve',@1=2
Go

在更新語句中,EF API通過主鍵找到要修改的實例,修改時僅包含修改的屬性,其他屬性將被忽略。在上面的示例中,僅FirstName編輯了屬性,因此update語句中只包含FirstName列。

3.刪除數據

DbSet.Remove()方法用於刪除數據庫表中的記錄。

using (var context = new SchoolDBEntities())
{
    var std = context.Students.First<Student>();
    context.Students.Remove(std);
    context.SaveChanges();
}

context.Students.Remove(std)將std實體對象標記為Deleted。因此,EF將在數據庫中構建並執行以下DELETE語句。

exec sp_executesql N'DELETE [dbo].[Students]
WHERE ([StudentId] = @0)',N'@0 int',@0=1
Go

通過上邊的例子可以看出,在線場景中添加,更新或刪除中的數據非常容易。

 

EF系列目錄鏈接:Entity Franmework系列教程匯總


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM