定義 DbSets

使用 Code First 工作流程進行開發時,您可以定義衍生的 DbCoNtext,代表您與資料庫的會話,並針對模型中的每個類型公開 DbSet。 本主題涵蓋您可以定義 DbSet 屬性的各種方式。

具有 DbSet 屬性的 DbCoNtext

Code First 範例所示的常見案例是讓 DbCoNtext 具有模型實體類型的公用自動 DbSet 屬性。 例如:

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

在 Code First 模式中使用時,這會將部落格和文章設定為實體類型,以及設定可從這些存取的其他類型。 此外,DbCoNtext 會自動呼叫這些屬性的 setter,以設定適當 DbSet 的實例。

具有 IDbSet 屬性的 DbCoNtext

在某些情況下,例如建立模擬或假貨時,使用介面來宣告您的集合屬性會比較有用。 在這種情況下,IDbSet 介面可用來取代 DbSet。 例如:

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

此內容的運作方式與針對其集合屬性使用 DbSet 類別的內容完全相同。

具有唯讀集合屬性的 DbCoNtext

如果您不想公開 DbSet 或 IDbSet 屬性的公用 setter,您可以改為建立唯讀屬性,並自行建立集合實例。 例如:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs
    {
        get { return Set<Blog>(); }
    }

    public DbSet<Post> Posts
    {
        get { return Set<Post>(); }
    }
}

請注意,DbCoNtext 會快取從 Set 方法傳回的 DbSet 實例,讓每個屬性在每次呼叫時都會傳回相同的實例。

探索 Code First 的實體類型的運作方式與使用公用 getter 和 setter 的屬性相同。