本文章是由機器翻譯。

資料點

Entity Framework 策略揭密:建立模型工作流程

鄭 Lerman

資料存取技術,是設計來符合各種開發樣式的需求,Microsoft Entity Framework 會提供選項很多開發人員。其中某些需要在開發週期早期進行,並會影響您將有哪些選項進一步以及在開發過程中。在我接下來三個資料行,我將提供您要所作的實體架構的最大決策的一些高階指導:

  • 首先,程式碼來建立概念性模型的第一個模型或資料庫第一個工作流程
  • 延遲、 明確或急切載入
  • 一般舊 C# 物件 (POCOs) 或 EntityObjects
  • LINQ 的實體或實體 SQL

有許多多個設計決策来擬定整個應用程式,但是最常詢問這些問題 — 及通常 debated — 由開發人員他們一開始實作到現有或新應用程式的實體架構。

我將攻擊的概念模型建立工作流程,並涵蓋以下兩個資料行中的其他三個主題。我的目標是要提供高階概觀。

建立概念模型的三個選項

Entity Framework 依賴網域實體,稱為實體資料模型 (EDM)、 概念模型和選擇如何建立該模型是您要讓第一個決策。有三個不同的工作流程可供選擇:

  • 資料庫第一個工作流程開始與舊版的資料庫,並運用資料庫到概念模型的反向工程精靈。
  • 模型第一個工作流程的開頭空白著手。您使用視覺化的 EDM 設計工具來設計 EDM 中,然後從該模型會產生資料庫結構描述。
  • 程式碼第一個工作流程的開頭說明您的概念性模型的類別。使用與第一個程式碼沒有視覺化模型。

第一次資料庫:啟動與傳統資料庫

Entity Framework 的第一個反覆項目,我們沒有所有所述的選項。建立模型的唯一方法是以反向工程到 EDM,我們稱資料庫第一個模型為現有的資料庫 (請參閱圖 1)。

圖 1與資料庫前,您反向工程從傳統資料庫模型

您可能已經看到等一下我們有許多時候,事實上會。您開啟 EDM 精靈]、 指向現有的資料庫],選取資料表、 檢視、 預存程序和使用者定義函式] 您想要表示模型中,按一下 [完成] 按鈕。很快地,出生模型。第一個資料庫模型為虛擬反映資料庫的啟動其生命 (或您所選取的資料庫的子集)。沒有更多的投入量,與開發人員已將因 Entity Framework。您可以撰寫強型別對此模型中,查詢和 Entity Framework 會為您執行這些查詢並將具體化從結果的強型別的物件。然後,當您使用結果時,Entity Framework 追蹤變更,並可讓您只要呼叫其 SaveChanges 命令將它們保留回資料庫。

這樣就有些開發人員需要從 Sp1 開始,但它們錯過其中一項非常多的好處是具有模型亦即您可以讓它看起來更像您的網域 — 類別和關聯,以定義您的應用程式 — 比資料庫,然後不不必擔心如何利用有上一步] 到您的資料庫 (其 Entity Framework 仍可讓您處理)。模型自訂是 EDM 中,許多開發人員都忽略了不受益的重要功能。您可以繼承階層架構引入模型、 調整其形狀的實體、 合併及分割實體,以及其他等等。

與資料庫第一,您可以有最佳的這些世界的兩個:運用現有的資料庫,以取得建立您的模型,很好的開始,然後自訂該模型,以更能反映您的應用程式定義域。

第一次建立模型:視覺化模型的開頭

您永遠不會開始使用有舊版的資料庫。模型第一次可讓您設計直接在設計工具中的模型和建立資料庫結構描述模型為基礎。您可以建置您的實體和它們的屬性、 定義關聯性和其條件約束,並在設計工具建立繼承階層架構權限。您可以指定哪些屬性會識別機碼,即使資料庫應該要負責產生它們的值 (請參閱圖 2)。

圖 2與模型首先,您設計模型,用來產生資料庫結構描述

EDM 設計工具 」 建立資料庫從模型 」 功能並不會實際建立資料庫。它會做的就是資料庫的建置 SQL,當執行時,會定義結構描述。這個 SQL 稱為資料定義語言中或 DDL。

有幾個非明顯件事要注意。模型的第一次所引用為在 Visual Studio 2010 及 Microsoft 的數字。NET Framework 4。在 Visual Studio 2008 中找不到建立資料庫選項。另外,因為它是一項新功能,您將需要確保 ADO。NET 資料提供者所使用 (例如,System.Data.Sql) 已經更新以提供這項功能。Microsoft SQL Server 提供者已經過更新。NET 4 發行; 某些協力廠商提供者也已經更新。

若要準備好面對行為是模型第一個不會,根據預設,執行累加式的結構描述更新到您的資料庫。當您執行此功能時,就會建立全新的 DDL 指令碼,將會移除,然後重新建立所有資料庫物件。外部工具,可用來協助您修改資料庫結構描述,而覆寫它。否則您會想要事先備份資料或撰寫指令碼來重新產生測試資料的隨時想修改模型並重新建立資料庫結構描述。

Visual Studio 不會在資料庫層代,您可以利用從 Microsoft 的實體設計工具資料庫產生 Power Pack 協助提供擴充性點。您可以從 Visual Studio 2010 擴充管理員或下載它visualstudiogallery.com。這個延伸不只提供一種方法對您進行累加式變更為資料庫模型第一,但它也可讓您要變更預設的每個階層的資料表繼承對應甚至建立自己自訂的 DDL 產生規則。

第一次程式碼:以程式碼開頭,並且不執行實體模型

有了資料庫第一個和第一個模型,您會得到您 EDM 連同其他中繼資料的實體表示。這種模型的原始格式是 XML。它會儲存在副檔名為 EDMX 的檔案,並在 EDM 設計工具] 或 [原始 XML 中使用它。在執行階段,Entity Framework 讀取該 XML,並建立模型使用的特定的類別,表示中繼資料的記憶體中表示,實體、 關聯性等等。Entity Framework 執行階段的運作方式與這些物件而不實際的 XML 檔案。Entity Framework 需要將模型查詢轉換為資料庫查詢,資料庫結果為實體執行個體,並建立資料庫命令插入、 更新和刪除時,此中繼資料是特別重要。Visual Studio 就會產生您的網域類別從您的應用程式中使用 XML。

Entity Framework 小組已經提供用來在執行階段建立所需的中繼資料物件,而不需要您有一個實體的 EDMX 檔案。這是背後 Sp1 開始,呼叫程式碼第一的第三個模型建立工作流程的能力。與程式碼第一次,而非建立 EDM 中,您建立您網域類別一樣,任何其他。NET 開發。在執行階段,Entity Framework 仍然可以檢查這些類別和,使用一組的預設慣例,建置 Entity Framework 執行階段可以使用的記憶體模型。由於您的類別不會永遠自然提供 Entity Framework 需要建立該模型的資訊,您可以提供額外的設定 (使用宣告式屬性/資料註釋或在程式碼中使用專有的 API) 來進一步描述模型中,覆寫先前所述的慣例。您可以使用組態的模型工作],從識別不符合第一個程式碼慣例微調的關聯性的主索引鍵或甚至指定 [表示繼承階層架構的方式有很多種。

像模型第一,第一個程式碼會預設為不啟動與舊版的資料庫,presumption 並提供這項功能可以從推斷模型建立該資料庫。與不同的是模型第一,您可以建立資料庫檔案,以及結構描述。與程式碼第一,您仍然缺乏方法來保存資料庫資料,如果您修改模型並重新產生資料庫。不過,第一個程式碼不會有支援,以偵測到模型與資料庫的差異,以及使用資料庫初始設定式的資料植入資料庫。

您也可以使用程式碼第一個與現有的資料庫。如果您的類別和屬性名稱不符合資料庫,您可以新增資料註解] 或 [透過專有 API 來克服的組態。圖 3顯示與屬性,會強制程式碼第一個提供正確的資料表和屬性名稱的對應,即使不完全符合的類別和欄位的類別。

圖 3具有程式碼以確保類別的第一個屬性的類別可以正確地對應到現有的資料表

[Table("SalesOrderDetail", SchemaName="SalesLT")]
  public partial class Detail
  {
    // Scalar properties

    [Column(Name = "SalesOrderID")]
    public int OrderId { get; set; }
    [Column(Name = "SalesOrderDetailID")]
    public int DetailId { get; set; }
    public short OrderQty { get; set; }
    public int ProductId { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal UnitPriceDiscount { get; set; }

    public decimal LineTotal { get; set; }
    public System.DateTime ModifiedDate { get; set; }

    // Navigation properties

    public virtual Product Product { get; set; }
    public virtual Order Order { get; set; }
  }

決策樹

Entity Framework 已經進化以支援各種開發樣式,但這個強制現在我們要熟悉選項],以選擇正確的方法。如果您願意 UI 用於您的模型,您可以使用 EDM 設計工具是否您要使用現有的資料庫啟動或使用模型第一個選項。即使如此,您仍然可以使用製造模型者 」 來保障在地面利害關係以及然後使用範本來建立第一個程式碼的類別和卸除的視覺模型。如果您所有關於程式碼並不想繫結至 EDMX 檔或視覺化製造模型者 」 時,第一個程式碼會吸引您 (請參閱圖 4)。

圖 4決策樹

開始進行的正途

您選擇何種模組化技術 — 資料庫第一個、 第一個模型或程式碼第一,建立模型之後,您就不會覺得任何差異,當您開始查詢、 互動和保存使用 Entity Framework 執行階段模型的類別的形式的實體。而且很可能開始的一個工作流程並切換到另一個。您可以從使用 DbContext 程式碼產生範本 EDMX 建立程式碼第一個類別。然後,而不是那麼簡單相當,則您也可以從程式碼第一個類別建立 EDMX。

我已經提供高層檢視的選擇什麼可能磁碟機您選擇一種,並希望我已經揭密的選項,讓您一些。

在未來資料行,我將說明有關所需要面對您 Entity Framework 應用程式,我在本篇文章開頭所述其他大決策:EntityObjects 或 POCOs,載入所選擇的程式碼產生策略相關使用渴望、 延遲或明確載入,並寫入使用 LINQ 實體或 Entity SQL 查詢的資料。

Julie Lerman* 是 Microsoft 類似 MVP。NET 的指導和顧問居住在 Vermont 丘陵您可以找到她在資料存取和其他 Microsoft 呈現。NET 主題,在使用者群組和世界各地的會議。在她部落格thedatafarm.com/blog是高度讚賞的活頁簿,「 程式設計 Entity Framework 」 (O'Reilly 媒體,2010年) 的作者。她按照在 Twittertwitter.com/julielerman。*

感謝至下列技術專家檢閱這份文件:Tim Laverty