空間 - EF 設計工具
注意
僅限 EF5 及更新版本 - 在 Entity Framework 5 中已介紹此頁面所討論的功能、API 等。 如果您使用的是較早版本,則不適用部分或全部的資訊。
影片和逐步解說示範如何使用 Entity Framework Designer 對應空間類型。 它也示範如何使用 LINQ 查詢來尋找兩個位置之間的距離。
本逐步解說會使用 Model First 來建立新的資料庫,但 EF 設計工具也可以與 Database First 工作流程搭配 使用,以對應至現有的資料庫。
Entity Framework 5 引進了空間類型支援。 請注意,若要使用空間類型、列舉和資料表值函式等新功能,您必須以 .NET Framework 4.5 為目標。 Visual Studio 2012 預設會以 .NET 4.5 為目標。
若要使用空間資料類型,您也必須使用具有空間支援的 Entity Framework 提供者。 如需詳細資訊,請參閱 空間類型的 提供者支援。
有兩個主要的空間資料類型:geography 和 geometry。 geography 資料類型會儲存橢圓體資料(例如 GPS 緯度和經度座標)。 geometry 資料類型代表 Euclidean (平面) 座標系統。
觀賞影片
這段影片示範如何使用 Entity Framework Designer 對應空間類型。 它也示範如何使用 LINQ 查詢來尋找兩個位置之間的距離。
呈現者 :朱麗亞·科尼奇
必要條件
您必須安裝 Visual Studio 2012、Ultimate、進階版、Professional 或 Web Express 版本,才能完成本逐步解說。
設定專案
- 開啟 Visual Studio 2012
- 在 [ 檔案] 功能表上,指向 [ 新增 ],然後按一下 [ 專案]
- 在左窗格中,按一下 [Visual C# ],然後選取 主控台 範本
- 輸入 SpatialEFDesigner 作為專案的名稱,然後按一下 [ 確定]
使用 EF 設計工具建立新的模型
- 以滑鼠右鍵按一下方案總管中的專案名稱,指向 [ 新增 ],然後按一下 [ 新增專案]
- 從左側功能表中選取 [資料 ],然後在 [範本] 窗格中選取 [ADO.NET 實體資料模型 ]
- 輸入 UniversityModel.edmx 以取得檔案名,然後按一下 [ 新增]
- 在 [實體資料模型精靈] 頁面上,選取 [選擇模型內容] 對話方塊中的 [空白模型 ]
- 按一下 [ 完成]
[實體設計工具] 會顯示為編輯模型提供設計介面。
精靈會執行下列動作:
- 產生 EnumTestModel.edmx 檔案,該檔案會定義概念模型、儲存模型,以及它們之間的對應。 將 .edmx 檔案的中繼資料成品處理屬性設定為內嵌在輸出元件中,讓產生的中繼資料檔案內嵌到元件中。
- 新增下列元件的參考:EntityFramework、System.ComponentModel.DataAnnotations 和 System.Data.Entity。
- 建立 UniversityModel.tt 和 UniversityModel.CoNtext.tt 檔案,並將其新增至 .edmx 檔案底下。 這些 T4 範本檔案會產生程式碼,以定義對應至 .edmx 模型中實體的 DbCoNtext 衍生類型和 POCO 類型
新增實體類型
- 以滑鼠右鍵按一下設計介面的空白區域,選取 [新增 - > 實體 ],[新增實體] 對話方塊隨即出現
- 指定 University 作為類型名稱,並針對索引鍵屬性名稱指定 UniversityID ,將類型保留為 Int32
- 按一下 [檔案] > [新增] > [專案]
- 以滑鼠右鍵按一下實體,然後選取 [新增 - > 純量屬性]
- 將新屬性重新命名為 Name
- 新增另一個純量屬性並將它重新命名為 Location Open the 屬性視窗,並將新屬性的類型變更為 Geography
- 儲存模型並建置專案
注意
當您建置時,有關未對應的實體和關聯警告可能會出現在錯誤清單中。 您可以忽略這些警告,因為我們選擇從模型產生資料庫之後,錯誤將會消失。
從模型產生資料庫
現在我們可以產生以模型為基礎的資料庫。
- 以滑鼠右鍵按一下實體設計工具介面上的空白空間,然後從模型選取 [ 產生資料庫]
- [產生資料庫精靈] 的 [選擇您的資料連線對話方塊隨即顯示,按一下 [新增連線ion ] 按鈕 [指定伺服器名稱和 資料庫的 University ] 按鈕 [指定 (localdb)\mssqllocaldb ],然後按一下 [ 確定]
- 詢問您是否要建立新資料庫的對話方塊隨即出現,按一下 [ 是 ]。
- 按 [下一步 ],[建立資料庫精靈] 會產生資料定義語言 (DDL)來建立資料庫。產生的 DDL 會顯示在 [摘要] 和 [設定對話方塊附注] 中,指出 DDL 不包含對應至列舉型別之資料表的定義
- 按一下 [ 完成 ] 按一下 [完成] 不會執行 DDL 腳本。
- 建立資料庫精靈會執行下列動作:在 T-SQL 編輯器中開啟 UniversityModel.edmx.sql 產生 EDMX 檔案的存放區架構和對應區段:將連接字串資訊新增至 App.config 檔案
- 按一下 T-SQL 編輯器中的滑鼠右鍵,然後選取 [執行 伺服器連線] 對話方塊,輸入步驟 2 中的連線資訊,然後按一下 [連線
- 若要檢視產生的架構,請以滑鼠右鍵按一下 SQL Server 中的資料庫名稱物件總管,然後選取 [ 重新整理]
保存和擷取資料
開啟定義 Main 方法的 Program.cs 檔案。 將下列程式碼新增至 Main 函式。
程式碼會將兩個新的 University 物件新增至內容。 空間屬性是使用 DbGeography.FromText 方法初始化。 以 WellKnownText 表示的 geography 點會傳遞至 方法。 然後,程式碼會儲存資料。 然後,會建構和執行傳回其位置最接近指定位置之 University 物件的 LINQ 查詢。
using (var context = new UniversityModelContainer())
{
context.Universities.Add(new University()
{
Name = "Graphic Design Institute",
Location = DbGeography.FromText("POINT(-122.336106 47.605049)"),
});
context.Universities.Add(new University()
{
Name = "School of Fine Art",
Location = DbGeography.FromText("POINT(-122.335197 47.646711)"),
});
context.SaveChanges();
var myLocation = DbGeography.FromText("POINT(-122.296623 47.640405)");
var university = (from u in context.Universities
orderby u.Location.Distance(myLocation)
select u).FirstOrDefault();
Console.WriteLine(
"The closest University to you is: {0}.",
university.Name);
}
編譯並執行應用程式。 此程式會產生下列輸出:
The closest University to you is: School of Fine Art.
若要檢視資料庫中的資料,請以滑鼠右鍵按一下 SQL Server 中的資料庫名稱物件總管,然後選取 [ 重新整理 ]。 然後,按一下資料表上的滑鼠右鍵,然後選取 [ 檢視資料 ]。
摘要
在本逐步解說中,我們已瞭解如何使用 Entity Framework Designer 對應空間類型,以及如何在程式碼中使用空間類型。