Entity Framework Core

Entity Framework (EF) Core 是常見 Entity Framework 資料存取技術的輕量型、可擴充、開放原始碼且跨平台版本。

EF Core 可作為物件關聯式的對應程式 (O/RM),其:

  • 可讓 .NET 開發人員使用 .NET 物件來處理資料庫。
  • 無須使用在一般情況下需要撰寫的大部分資料存取碼。

EF Core 支援許多資料庫引擎,如需詳細資料,請參閱資料庫提供者

模型

運用 EF Core,使用模型來執行資料存取。 模型是由實體類別和內容物件所組成,其內容物件代表具有資料庫的工作階段。 內容物件可讓您查詢和儲存資料。 如需詳細資訊,請參閱建立模型

EF 支援下列模型開發方法:

  • 從現有的資料庫產生模型。
  • 手動撰寫符合資料庫的模型。
  • 建立模型之後,使用 EF 移轉從模型建立資料庫。 移轉允許資料庫隨著模型變更而發展。
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;

namespace Intro;

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(
            @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public int Rating { get; set; }
    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

查詢

使用 Language Integrated Query (LINQ) 從資料庫中擷取實體類別執行個體。 如需詳細資訊,請參閱查詢資料

using (var db = new BloggingContext())
{
    var blogs = db.Blogs
        .Where(b => b.Rating > 3)
        .OrderBy(b => b.Url)
        .ToList();
}

儲存資料

使用您實體類別的執行個體,建立、刪除和修改資料庫中的資料。 若要深入了解,請參閱儲存資料

using (var db = new BloggingContext())
{
    var blog = new Blog { Url = "http://sample.com" };
    db.Blogs.Add(blog);
    db.SaveChanges();
}

EF O/RM 考量

雖然 EF Core 很適合摘要說明許多程式設計的詳細資料,但有一些適用於所有 O/RM 的最佳做法,可協助避免生產應用程式中常見的錯誤:

  • 中繼層級知識或更高階的基礎資料庫伺服器,對於在高效能生產應用程式中架構、偵錯、分析及移轉資料至關重要。 例如,主索引鍵和外部索引鍵、條件約束、索引、正規化、DML 和 DDL 陳述式、資料類型、分析等等的知識。
  • 功能與整合測試:請務必盡可能將生產環境複寫到:
    • 尋找只會在使用特定資料庫伺服器版本時才會出現的應用程式問題。
    • 在升級 EF Core 和其他相依性時攔截重大變更。 例如,新增或升級架構,例如 ASP.NET Core、OData 或 AutoMapper。 這些相依性會以非預期的方式影響 EF Core。
  • 具有代表性負載的效能和壓力測試。 某些功能的單純使用方式無法妥善縮放。 例如,多個集合「包含」、大量使用延遲載入、非索引資料行的條件式查詢、存放區產生值的大量更新及插入、缺少並行處理、大型模型、快取原則不足。
  • 安全性檢閱:例如,處理連接字串和其他祕密、非部署作業的資料庫權限、原始 SQL 的輸入驗證、加密敏感性資料。
  • 請確定有足夠可用的記錄和診斷。 例如,適當的記錄設定、查詢標籤和 Application Insights。
  • 錯誤復原。 準備常見失敗案例的應變措施,例如版本復原、後援伺服器、擴增與負載平衡、DoS 風險降低以及資料備份。
  • 應用程式部署和移轉。 規劃如何在部署期間套用移轉;在應用程式啟動時執行作業可能會發生並行問題,需要比一般作業所需權限更高的權限。 使用暫存協助在移轉期間從嚴重錯誤中復原。 如需詳細資訊,請參閱套用移轉
  • 詳細檢查與測試所產生的移轉。 移轉應該先經過完全測試,再套用至生產資料。 一旦資料表包含生產資料,結構描述圖形和資料行類型就無法輕易變更。 例如,在 SQL Server 上,nvarchar(max)decimal(18, 2) 幾乎不是對應至字串和十進位屬性的資料行最佳類型,但卻是 EF 使用的預設值,因為不知道您有特定案例。

下一步

如需簡介教學課程,請參閱 Entity Framework Core 使用者入門