在線場景中保存數據
在線場景中保存實體數據是一項相當容易的任務,因為使用的是同一個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系列教程匯總
