Entity Framework 建國科技大學 資管系 饒瑞佶.

Slides:



Advertisements
Similar presentations
第3章 数据库建模实践指南 北师大珠海分校软件工程系 赵池龙.
Advertisements

第六章 数据库和ADO.NET 褚龙现 软件学院.
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
Google App Engine Google 應用服務引擎.
Views ,Stored Procedures, User-defined Function, Triggers
題目:十六對一多工器 姓名:李國豪 學號:B
第六章 學習SQL語言.
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Visual C# 2010 程式設計經典 第15章 ADO .NET與資料工具.
LINQ 建國科技大學 資管系 饒瑞佶.
SQL結構化查詢語言 SQL是 Structured Query Language 的縮寫,簡單的說,SQL是一種與資料庫溝通的共通語言,它是當時在 IBM 工作的 E.F. Codd於1970 年針對關聯式模型 ( relational model ),所建構出來的資料庫理論,也因此有了所謂關聯式資料庫的系統,但在發展的初期,由於各種關聯式資料庫系統廠商的.
PHP與SQL語法存取MySQL SQL
後端教學-MYSQL 講師:邱小楓(邱珈蓉)
9/28號專題報告 Web網頁遊戲 曾建瑋.
JAVA vs. SQL Server 建國科技大學 資管系 饒瑞佶 2013/4 V1.
連結資料庫 ACCESS MSSQL.
Q101 在701 SDX Linux上的標準安裝與使用程序v2
二.資料庫系統建立與管理 Access 資料庫:windows下的單機資料庫 Access 操作 Mysql資料庫介紹.
JDK 安裝教學 (for Win7) Soochow University
高等資料庫管理系統 Advanced Database Management System
DataSet.
第八章 利用SELECT查詢資料.
SQL語法 定義與操作指令.
An Introduce to NHibernate
Working with Databases (II) 靜宜大學資管系 楊子青
資料庫操作.
第20章 LINQ 資料查詢技術 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或拷貝.
Google Data API Spreadsheet
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
SQL結構化查詢語言 SQL是 Structured Query Language 的縮寫,簡單的說,SQL是一種與資料庫溝通的共通語言,它是當時在 IBM 工作的 E.F. Codd於1970 年針對關聯式模型 ( relational model ),所建構出來的資料庫理論,也因此有了所謂關聯式資料庫的系統,但在發展的初期,由於各種關聯式資料庫系統廠商的.
資料庫管理(Access 2003) 第五章 利用查詢來 統計與分析資料 許欽嘉 老師.
App Inventor2呼叫PHP存取MySQL
資料庫程式設計 VB資料庫設計簡介 週次:6 建國科技大學 資管系 饒瑞佶.
Java 程式設計 講師:FrankLin.
網頁切換移轉 JS vs. ASP.NET.
C# 程序设计教程 同济大学计算机系基础学科组
VS.NET 2003 IDE.
FileUpload控制項 建國科技大學 資管系 饒瑞佶 2007年.
Pocket Access.
VB2005 DataBase Manipulation Command for Access
第 19 章 XML記憶體執行模式.
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
PHP與MySQL 入門學習指南 凱文瑞克 著 第 22 章 SQL 介紹與建立MySQL資料庫.
讓Emulator可以 使用Android Market
IIS Internet Information Services
VS.NET 2003 IDE.
GridView.
GridView操作 (II).
LINQ資料查詢技術.
智慧型手機程式設計 建國科技大學資管系 饒瑞佶 2011年(992).
取得與安裝TIDE 從TIBBO網站取得TIDE
陣列與結構.
JQuery 標籤操作 建國科技大學 資管系 饒瑞佶 2013/4 V1.
SQL語法教學 2015/10/15 John.
從HTML表格到CSS 靜宜大學 資管系 楊子青.
雲端課程補充資料 僑光資管 王行一 本簡報資料皆在網路上取得.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
專案建置與封裝程式 建國科技大學 資管系 饒瑞佶.
遊戲設計 AssetBundle.
Cloud Training Material- 事件 Sherman Wang
連結資料庫 MYSQL.
再戰DataSet.
多國語系 建國科技大學 資管系 饒瑞佶.
C#快速導讀 流程控制.
SQLite資料庫 靜宜大學資管系 楊子青.
InputStreamReader Console Scanner
Presentation transcript:

Entity Framework 建國科技大學 資管系 饒瑞佶

Entity Framework ADO.NET 進階存取框架 簡化SQL指令編寫工作 透過ORM(Object Relational Mapping) 物件結構與資料庫綱要間的對應 程式設計者只要熟悉物件操作就可以存取資料庫,無須學習SQL指令,而是透過Linq to Entities(使用到匿名委派函數)

ORM AP Object API 物件操作服務 Mapping Services 物件操作轉資料庫操作服務 DB Provider LINQ to Entities Object API 物件操作服務 Object Services Entity SQL Services Mapping Services 物件操作轉資料庫操作服務 DB Provider 資料庫操作服務 ADO.NET DB

EF分類 資料優先:Database First 模式優先:Model First 程式優先:Code First 依據現有資料庫綱要產生對應塑模 最好入門 模式優先:Model First 在專案中定義資料模型,對應產生資料庫 程式優先:Code First 透過程式產生資料庫綱要與關聯,並操作資料庫 不需要知道資料庫種類與版本

擴充Entity Framework 確認是否已經存在?

完整的EF架構 在ADO.NET實體資料模型應該有四個選項,而不是預設的兩個

出現ADO.NET實體資料模型

Install EF tools http://www.microsoft.com/en-us/download/details.aspx?id=40762 選擇對應的VS版本安裝

現在變成四個了

Database First

Database First 新增一個ADO.NET實體資料模型

也可以使用local DB

App.config中儲存的名稱 後面存取時會使用到

會出現下面視窗

Entity Data Model

Northwind.edmx

Northwind.tt 產生資料庫物件所對應的程式碼檔案

DB

透過EF存取資料庫 前面建立EF模型時在App.config中儲存的名稱 資料表名稱 using (NorthwindEntities context = new NorthwindEntities()) { var query = from item in context.Employees select new a = item.FirstName, b = item.BirthDate, c = item.Address }; foreach (var item in query) listBox1.Items.Add("Name=" + item.a + "/Birthday=" +item.b + "/address=" + item.c); } 資料表名稱

result

可以直接用在ASP.NET

整合dataGridView

RESULT 資料目前在記憶體中(offline模式) 與DataSet相同 不具備同步功能

修改資料 直接透過dataGridView或綁定物件(下一頁)進行修改 再透過SaveChanges方法同步資料庫 context.SaveChanges(); 新增/刪除無法透過此語法進行

綁定物件 先加入bindingsource1物件

再加入輸入框物件綁定 textBox1.DataBindings.Add("Text", bindingSource1, "CompanyName", true, DataSourceUpdateMode.OnPropertyChanged); 這裡自動會雙向同步,也就是修改TextBox,dataGridView也會改 與DataSet不同

從鍵盤刪除 透過物件操作 Customers是資料表物件 取得bindingsource目前的資料物件 從EF中移除資料物件 回寫同步資料庫

var p = (Customers)bindingSource1.Current; context.Customers.Remove(p); context.SaveChanges(); // 更新記憶體中的EF foreach (var entity in context.ChangeTracker.Entries()) { entity.Reload(); } // 重新整理datagridview dataGridView1.DataSource = bindingSource1; 這裡一定要更新,否則會造成下次異動時 資料不同步問題,例如新增後刪除,少了這個變成資料庫已經刪除,但EF內仍有資料,再新增時就會出錯

從bindingNavigator刪除 bindingNavigator1_ItemClicked事件 if (object.ReferenceEquals(e.ClickedItem, this.bindingNavigatorDeleteItem)) { DialogResult useranswer = MessageBox.Show("確定要刪除?", "刪除提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (useranswer == DialogResult.OK) // 刪除資料 var p = (Customers)bindingSource1.Current; context.Customers.Remove(p); context.SaveChanges(); // 更新記憶體內的EF foreach (var entity in context.ChangeTracker.Entries()) entity.Reload(); } // 重新整理datagridview this.bindingSource1.DataSource = context.Customers.ToList(); else this.bindingNavigator1.DeleteItem = null;

搜尋(I) 這裡用到大量的匿名委派函數 完全比對 dataGridView1.DataSource = context.Customers.Where(x => x.CompanyName == "Alfreds Futterkiste").ToList(); 資料來自於物件的完全比對 dataGridView1.DataSource = context.Customers.Where(x => x.CompanyName == textBox1.Text).ToList();

搜尋(II) 資料來自於物件的模糊比對 dataGridView1.DataSource = context.Customers.Where(x => x.CompanyName.Contains(textBox2.Text)).ToList(); 資料來自於物件的模糊比對+排序+顯示指定欄位 dataGridView1.DataSource = context.Customers.Where(x => x.CompanyName.Contains(textBox2.Text)) .OrderBy(x=>x.Country) .Select(x => new { x.CompanyName, x.Address, x.Country }).ToList();

新增 var t = new Customers //Customers是資料表名稱 { // 設定欄位值 //CustomerID = Guid.NewGuid(), //如果是自動編號 CustomerID = "aa", CompanyName = "aa", }; context.Customers.Add(t); // 新增資料到EF context.SaveChanges(); // 同步資料到資料庫 // 重新整理datagridview this.bindingSource1.DataSource = context.Customers.ToList();

Model First

Model First 新增一個ADO.NET實體資料模型 選擇空的EF Designer模型

從空白的EF Designer開始設計

拖曳一個實體到Designer

重新命名為Blog 建立資料庫時的名稱

加入純量屬性 新增4個屬性

Id屬性設定

設定型別 欄位 型別 Id Guid (PK) OwnerId int Caption String DateCreated DateTime

同樣方法建立BlogArticle資料表 欄位 型別 Id Guid (PK) BlogId Guid (FK) Subject String Body DateCreated DateTime DateModified

完成後

建立關聯

關聯屬性

由模型產生資料庫

選擇要使用的資料庫

DDL (Data Definition Language)

執行DDL 導致連接中斷

如果沒成功可以再執行一次DDL

DDL命令執行完成

result

檢視App.config 透過Model First新增的實體Entity 後面的使用方式與前面的NorthWindEntities相同

上一個Model First是把資料表新增到既有資料庫 這裡是要直接建立資料庫與資料表 Re-Model First 上一個Model First是把資料表新增到既有資料庫 這裡是要直接建立資料庫與資料表

一樣建立兩張表與關聯

加入程式碼產生項目

BlogModel.tt

產生建立資料庫的code

由模型產生資料庫

選擇新增連接

輸入BlogDB資料庫 這裡會建立資料庫

確認已建立資料庫

產出DDL

執行DDL 導致連接中斷

重新執行DDL

資料庫產生完成 BEFORE AFTER

Code first 寫程式建立需要的DB與Table

先試試從資料庫產生對應的ER Class

選擇DB 連線字串

選擇資料表,EF會自動建立對應的程式類別

建立完成的類別 這邊規範資料表的建立

App.config

每張資料表再產生一個對應的類別

如果要全部自己來