亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Entity Framework 簡介

系統 1845 0

ADO.NET Entity Framework 是微軟以 ADO.NET 為基礎所發展出來的對象關系對應 (O/R Mapping) 解決方案,早期被稱為 ObjectSpace,現已經包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中發表。

  ADO.NET Entity Framework 以 Entity Data Model (EDM) 為主,將數據邏輯層切分為三塊,分別為 Conceptual Schema, Mapping Schema 與 Storage Schema 三層,其上還有 Entity Client,Object Context 以及 LINQ 可以使用。

背景

  長久以來,程序設計師和數據庫總是保持著一種微妙的關系,在商用應用程序中,數據庫一定是不可或缺的元件,這讓程序設計師一定要為了連接與訪問數據庫而去學習 SQL 指令,因此在信息業中有很多人都在研究如何將程序設計模型和數據庫集成在一起,對象關系對應 (Object-Relational Mapping) 的技術就是由此而生,像 Hibernate NHibernate 都是這個技術下的產物,而微軟雖然有了 ADO.NET 這 個數據訪問的利器,但卻沒有像NHibernate這樣的對象對應工具,因此微軟在.NET Framework 2.0發展時期,就提出了一個ObjectSpace的概念,ObjectSpace可以讓應用程序可以用完全對象化的方法連接與訪問數據庫,其技術概念 與NHibernate相當類似,然而ObjectSpace工程相當大,在.NET Framework 2.0完成時仍無法全部完成,因此微軟將ObjectSpace納入下一版本的.NET Framework中,并且再加上一個設計的工具(Designer),構成了現在的 ADO.NET Entity Framework。

  Entity Framework 利用了抽象化數據結構的方式,將每個數據庫對象都轉換成應用程序對象 (entity),而數據字段都轉換為屬性 (property),關系則轉換為結合屬性 (association),讓數據庫的 E/R 模型完全的轉成對象模型,如此讓程序設計師能用最熟悉的編程語言來調用訪問。而在抽象化的結構之下,則是高度集成與對應結構的概念層、對應層和儲存層,以 及支持 Entity Framework 的數據提供者 (provider),讓數據訪問的工作得以順利與完整的進行。

  (1) 概念層:負責向上的對象與屬性顯露與訪問。

  (2) 對應層:將上方的概念層和底下的儲存層的數據結構對應在一起。

  (3) 儲存層:依不同數據庫與數據結構,而顯露出實體的數據結構體,和 Provider 一起,負責實際對數據庫的訪問和 SQL 的產生。

架構

概念層結構

  概念層結構定義了對象模型 (Object Model),讓上層的應用程序碼可以如面向對象的方式般訪問數據,概念層結構是由 CSDL (Conceptual Schema Definition Language) 所撰寫1。

  一份概念層結構定義如下所示:

  <?xml version="1.0" encoding="utf-8"?>

  <Schema Namespace="Employees" Alias="Self" xmlns="http://schemas.microsoft.com/ado/2006/04/edm">

  <EntityContainer Name="EmployeesContext">

  <EntitySet Name="Employees" EntityType="Employees.Employees" />

  </EntityContainer>

  <EntityType Name="Employees">

  <Key>

  <PropertyRef Name="EmployeeId" />

  </Key>

  <Property Name="EmployeeId" Type="Guid" Nullable="false" />

  <Property Name="LastName" Type="String" Nullable="false" />

  <Property Name="FirstName" Type="String" Nullable="false" />

  <Property Name="Email" Type="String" Nullable="false" />

  </EntityType>

  </Schema>

對應層結構

  對應層結構負責將上層的概念層結構以及下層的儲存體結構中的成員結合在一起,以確認數據的來源與流向。對應層結構是由 MSL (Mapping Specification Language) 所撰寫2。

  一份對應層結構定義如下所示:

  <?xml version="1.0" encoding="utf-8"?>

  <Mapping Space="C-S" xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">

  <EntityContainerMapping StorageEntityContainer="dbo" CdmEntityContainer="EmployeesContext">

  <EntitySetMapping Name="Employees" StoreEntitySet="Employees" TypeName="Employees.Employees">

  <ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />

  <ScalarProperty Name="LastName" ColumnName="LastName" />

  <ScalarProperty Name="FirstName" ColumnName="FirstName" />

  <ScalarProperty Name="Email" ColumnName="Email" />

  </EntitySetMapping>

  </EntityContainerMapping>

  </Mapping>

儲存層結構

  儲存層結構是負責與 數據庫管理系統 (DBMS) 中的數據表做實體對應 (Physical Mapping),讓數據可以輸入正確的數據來源中,或者由正確的數據來源取出。它是由 SSDL (Storage Schema Definition Language) 所撰寫3。

  一份儲存層結構定義如下所示:

  ?xml version="1.0" encoding="utf-8"?>

  <Schema Namespace="Employees.Store" Alias="Self"

  Provider="System.Data.SqlClient"

  ProviderManifestToken="2005"

  xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">

  <EntityContainer Name="dbo">

  <EntitySet Name="Employees" EntityType="Employees.Store.Employees" />

  </EntityContainer>

  <EntityType Name="Employees">

  <Key>

  <PropertyRef Name="EmployeeId" />

  </Key>

  <Property Name="EmployeeId" Type="uniqueidentifier" Nullable="false" />

  <Property Name="LastName" Type="nvarchar" Nullable="false" MaxLength="50" />

  <Property Name="FirstName" Type="nvarchar" Nullable="false" />

  <Property Name="Email" Type="nvarchar" Nullable="false" />

  </EntityType>

  </Schema>

用戶端支持

  當定義好 Entity Data Model 的 CS/MS/SS 之后,即可以利用 ADO.NET Entity Framework 的用戶端來訪問 EDM,EDM 中的數據提供者會向數據來源訪問數據,再傳回用戶端。

  目前 ADO.NET Entity Framework 有三種用戶端4:

Entity Client

  Entity Client 是 ADO.NET Entity Framework 中的本地用戶端 (Native Client),它的對象模型和 ADO.NET 的其他用戶端非常相似,一樣有 Connection, Command, DataReader 等對象,但最大的差異就是,它有自己的 SQL 指令 (Entity SQL),可以用 SQL 的方式訪問 EDM,簡單的說,就是把 EDM 當成一個實體數據庫。

  // Initialize the EntityConnectionStringBuilder.

  EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();

  //Set the provider name.

  entityBuilder.Provider = providerName;

  // Set the provider-specific connection string.

  entityBuilder.ProviderConnectionString = providerString;

  // Set the Metadata location.

  entityBuilder.Metadata = @"res://*/AdventureWorksModel.csdl|

  res://*/AdventureWorksModel.ssdl|

  res://*/AdventureWorksModel.msl";

  Console.WriteLine(entityBuilder.ToString());

  using (EntityConnection conn = new EntityConnection(entityBuilder.ToString()))

  {

  conn.Open();

  Console.WriteLine("Just testing the connection.");

  conn.Close();

  }

Object Context

  由于 Entity Client 太過于制式,而且也不太符合 ORM 的精神,因此微軟在 Entity Client 的上層加上了一個供編程語言直接訪問的界面,它可以把 EDM 當成對象般的訪問,此界面即為 Object Context (Object Service)。

  在 Object Context 中對 EDM 的任何動作,都會被自動轉換成 Entity SQL 送到 EDM 中執行。

  // Get the contacts with the specified name.

  ObjectQuery<Contact> contactQuery = context.Contact

  .Where("it.LastName = @ln AND it.FirstName = @fn",

  new ObjectParameter("ln", lastName),

  new ObjectParameter("fn", firstName));

LINQ to Entities

  Object Context 將 EDM 的訪問改變為一種對對象集合的訪問方式,這也就讓 LINQ 有了發揮的空間,因此 LINQ to Entities 也就由此而生,簡單的說,就是利用 LINQ 來訪問 EDM,讓 LINQ 的功能可以在數據庫中發揮。

  using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())

  {

  ObjectQuery<Product> products = AWEntities.Product;

  IQueryable<Product> productNames =

  from p in products

  select p;

開發工具

  目前 ADO.NET Entity Framework 的開發,在 Visual Studio 2008 中有充份的支持,在安裝 Visual Studio 2008 Service Pack 1 后,文件范本中即會出現 ADO.NET 實體數據模型 (ADO.NET Entity Data Model) 可讓開發人員利用 Entity Model Designer 來設計 EDM,EDM 亦可由記事本或文本編輯器所編輯。

派生服務

  主條目:ADO.NET Data Services

Entity Framework 簡介

ADO.NET Entity Model Designer

微軟特別針對了網絡上各種不同的應用程序 (例如 AJAX, Silverlight, Mashup 應用程序) 開發了一個基于 ADO.NET Entity Framework 之上的服務,稱為 ADO.NET Data Services (項目代號為 Astoria),并與 ADO.NET Entity Framework 一起包裝在 .NET Framework 3.5 Service Pack 1 中發表。

支持廠商

  目前已有數個數據庫廠商或元件開發商宣布要支持 ADO.NET Entity Framework:

  (1) Core Lab,支持Oracle、MySQL、PostgreSQL 與 SQLite 數據庫。

  (2) IBM,實現 DB2 使用的 LINQ Provider。

  (3) MySQL,發展 MySQL Server 所用的 Provider。

  (4) Npqsql,發展 PostgreSQL 所用的 Provider。

  (5) OpenLink Software,發展支持多種數據庫所用的 Provider。

  (6) Phoenix Software International,發展支持 SQLite 數據庫的 Provider。

  (7) Sybase,將支持 Anywhere 數據庫。

  (8) VistaDB Software,將支持 VistaDB 數據庫。

  (9) DataDirect Technologies,發展支持多種數據庫所用的 Provider。

  (10) Firebird,支持 Firebird 數據庫。

Entity Framework 簡介


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 涩涩视频观看 | 久久精品亚洲精品国产色婷 | 99视频在线观看视频 | 亚洲专区欧美 | 国产亚洲欧美ai在线看片 | tobesex日本护士 | 9久9久女女热精品视频免费观看 | 狼人综合干伊人 | 久久精品国产午夜伦班片 | 欧美精品一区二区三区在线播放 | 色天使色婷婷在线影院亚洲 | 日韩精品一区二区三区中文3d | 国产一区中文字幕在线观看 | 一区二区亚洲精品 | 欧美激情在线一区二区三区 | 国产精品免费大片 | 青青久久99久久99久久999 | 色老头老太做爰视频在线观看 | 伊人色综合久久天天网蜜月 | 国产美女在线免费观看 | 97在线看片免费福利视频 | 男女车车好快的车车免费网站 | 美女网站视频免费 | 国产成人精品免费视频 | 久久久久夜色精品波多野结衣 | 免费看搡女人的视频 | 日本高清免费不卡毛片 | 久久99精品久久 | 国产精品天堂 | 久久精品国产久金国产思思 | 一区二区在线免费观看 | 亚洲一区欧美日韩 | 北条麻妃手机在线观看 | 日本大胆一区免费视频 | 久久久久99精品成人片三人毛片 | 99热最新网站 | 日韩欧美国产中文字幕 | 26uuu亚洲| 九九精品视频在线 | 国产精品亚洲一区二区三区 | 福利综合网|