Entity Framework 7:新的平臺與數據存儲系統
英文原文:Entity Framework 7: New Platforms and New Data Stores
創建 Entity Framework 的本意是為了在完整版本的 .NET 中操作關系型數據,而在 EF 7 中,以上兩點假設都不再成立。
Entity Framework 7 的平臺目標包括
- 完整的 .NET Framework
- ASP.NET 5
- Windows 10 通用應用平臺 UAP
- Mac
- Linux </ul>
- 關系型數據庫提供者:SQL Server、SQLite 和 Postgres
- Azure Table Storage
- Redis
- 內存數據庫提供者(用于測試目的) </ul>
而在提供者方面,EF 7 的目標包括
EF 7 的頂層體驗與 EF 6 是相同的,你仍然要與 DbContext、DbSet 等對象打交道。但內部的核心代碼都進行了重寫,這意味著元數據、變更跟蹤和查詢管道等部分都完全不同了,但對于多數應用場景來說,開發者是不會注意到這些變化的。
核心的變化是出于一系列原因的考慮,其中一個原因在于現有的架構非常難以改動,即使一些很基礎的需求,例如加入一個日志框架作為插件都顯得異常艱難。經過重寫核心代碼之后,那些令人困惑的 API 和行為都被徹底刪除了。
EF 在內存占用和速度上一直為人所詬病,而這次重寫的一個重點就是應對這些問題。這一改動的重要性體現在非常廣泛的平臺上,小型的移動設備的電池壽命非常有限,而多種云服務器則會按照 CPU 的使用率進行收費。
日志記錄
Entity Framework 中的日志記錄功能是源于 Microsoft.Owin.Logging 命名空間中的 ILogger 接口的實現。微軟希望這個接口能夠成為讓所有的 .NET 日志記錄框架都支持的標準接口。
SQL 生成方面的改進
在 EF 7 中,新增與修改操作會得到小幅度的改善。舉例來說,如果你打算對某張表中的四個產品應用某種折扣,在使用 EF 6 時,會產生共1+N次數據庫訪問:一次訪問用于加載數據,然后對每一行都要進行一次訪問。而在 EF 7 中,保存操作將成為批量操作,因此只需對數據庫進行兩次訪問。
比起使用原生 SQL 的一次訪問來說,這種方式依然較慢,但這種方式的優點在于能夠用于非關系型數據庫。
混合 SQL 與 LINQ
EF 7 支持在 LINQ 表達式中使用 FromSql 方法混合 SQL 語句,這樣你就能夠訪問某些 EF 通常無法使用的對象,例如表值函數或是應用了索引提示的表。
context.FromSql<Customer>("SELECT * FROM Customer (WITH (IX_Index)") .OrderBy (c => c.Name)
這種方式能夠生成正確的 SQL,對數據庫執行 order by 和 where 語句。
EF 與移動設備
正如上文所說,EF 7 的目標之一是不限于僅僅使用在桌面應用中。其中的一個用例是離線的移動設備,其目標是你可以在移動設備上使用相同的代碼以操作本地緩存及數據,然后將這些數據應用到服務器上。
要了解 Entity Framework 7 的更多信息,請觀看 Channel 9 的視頻“Entity Framework 7: Data for Web, Phone, Store, and Desktop”。