国产黄色毛片-国产黄色毛片视频-国产黄色片91-国产黄色片一级-一级坐爱片-一级免费

電子技術論文基于.NET Entity Framework數(shù)據(jù)庫訪問機制的設計

所屬欄目:電子技術論文 發(fā)布日期:2014-12-22 14:33 熱度:

  企業(yè)在開發(fā)軟件的過程中,為提升開發(fā)效率和增加技術積累,對不同的項目需求提取出一些共同的框架,數(shù)據(jù)庫訪問層便是其中之一。目前有很多好地 ORM[1?2](對象關系映射機制)框架已經很好地實現(xiàn)了數(shù)據(jù)訪問層,而且得到了很廣泛的應用,但由于許多公司技術人員水平有限,提取的數(shù)據(jù)庫訪問層和業(yè)務邏輯層的耦合程度不高,對開發(fā)效率上的提升不夠明顯[3]。

  摘 要: Entity Framework技術因其靈活、開發(fā)周期短等優(yōu)點,被廣泛運用到.NET平臺開發(fā)中。基于Entity Framework框架設計一個典型MVC架構中的數(shù)據(jù)庫訪問層,運用Entity Framework框架中的Code First方式結合泛型、封裝、單例模式等技術,實現(xiàn)實體類映射到數(shù)據(jù)庫表并自動往數(shù)據(jù)庫建表的功能,并對每個實體類自動向外發(fā)布了增、刪、改、查4種操作方法,編譯成DLL庫文件以插件的形式供業(yè)務邏輯層調用,達到與業(yè)務邏輯和數(shù)據(jù)庫完全解耦。

  關鍵詞:電子技術論文, 實體框架,泛型類型,接口,數(shù)據(jù)庫

  Research and application of database access mechanism based on .Net Entity Framework

  SHEN Xia?fei, WANG Jian?zhong

  (Institute of Information and Control, Hangzhou Dianzi University, Hangzhou 310018, China)

  Abstract: Entity Framework technology is widely used in .NET platform development due to its flexibility, short development cycle and other advantages. A database access layer in typical MVC architecture was designed based on Entity Framework. The Code First mode in Entity Framework combined with a generic framework, packaging, single?case model and other technologies is used to realize the entity classes mapping to database tables and generate the database tables automatically. The operations of addition, deletion, update and selection are released to each entity class automatically. The DLL library files are compiled for the business logic layer call in the form of plug?in to achieve the complete decoupling of business logic and database.

  Keywords: Entity Framework; generic type; interface; database

  0 引 言

  本文設計的數(shù)據(jù)庫訪問層解決了以上問題,它與業(yè)務邏輯低耦合,使用簡單,以高度封裝的DLL形式調用,可以節(jié)省大量的對數(shù)據(jù)庫存取的繁瑣操作,程序員能從數(shù)據(jù)庫存取中解脫出來專注于業(yè)務邏輯的設計。

  1 相關技術

  1.1 Entity Framework

  實體框架,是一種對象關系映射機制(ORM),能夠減少.NET Framework開發(fā)人員面向對象編程環(huán)境與關系數(shù)據(jù)庫環(huán)境之間的不匹配情形[4],使開發(fā)人員基本上可以通過熟悉的面向對象的技術來與應用程序的概念模型進行交互[5]。在實體框架中,開發(fā)人員能夠以特定于域的對象和屬性(如客戶和客戶地址)形式使用數(shù)據(jù),而不必考慮存儲此數(shù)據(jù)的基礎數(shù)據(jù)庫表和列。開發(fā)人員可以對概念模型發(fā)出數(shù)據(jù)訪問操作,然后實體框架會將該操作轉換為關系數(shù)據(jù)庫操作。

  1.2 Code First

  Code First是基于Entity Framework的新的開發(fā)模式,原來只有Database First和Model First兩種[6]。Code First顧名思義,就是先用C#/VB.NET的類定義好領域模型(實體類),然后用這些類映射到現(xiàn)有的數(shù)據(jù)庫表或者自動產生新的數(shù)據(jù)庫表。Code First同樣支持通過Data Annotations或fluent API進行定制化配置[7]。其中Entity Framework庫里面的DbContext基類為操控實體對象執(zhí)行上下文環(huán)境,提供所需的架構和映射元數(shù)據(jù)(Meatadata)、數(shù)據(jù)庫鏈接,同時還包括對象緩存、跟蹤狀態(tài)和關聯(lián)管理等功能[8]。使用時,定義一個繼承于DbContext的類,在該類里面配置好需要映射到數(shù)據(jù)庫表的各實體類。配置好后,這個類就成為了業(yè)務邏輯層里實體類和數(shù)據(jù)庫表交互的中間模型。   2 數(shù)據(jù)庫訪問機制設計

  2.1 總體設計框架

  數(shù)據(jù)庫訪問層是搭建在.NET Entity Framework框架的Code First方式之上的,將映射到數(shù)據(jù)庫表的各實體類通過DbContext類的擴展類配置好后,這個擴展類負責這些實體類與數(shù)據(jù)庫表的交互,這些實體類便共用了這個執(zhí)行上下文環(huán)境。當不需要定制復雜的映射關系(大部分情況下)時,可以直接以dll的形式使用本模塊,這么做實際上是每個實體類通過一個 DbContext類的擴展類映射到數(shù)據(jù)庫,即每個實體類獨立一個執(zhí)行上下文環(huán)境,將實體類泛型化,每個實體類通過泛型類型傳入數(shù)據(jù)訪問層,該層會通過層層調用自動生成對應的DbContext類的擴展類(執(zhí)行上下文)。當需要進行定制化配置時,可以重寫 DataContextService,DataContextProvider,DataContext三個抽象類,手動進行實體類的配置,并在配置文件里配置好關系。可見本模塊的可擴展性比較好。

  如圖1所示,該數(shù)據(jù)庫訪問模塊邏輯上又分三層:基礎服務層、倉儲層、數(shù)據(jù)訪問層。基礎服務層,該層通過讀取配置文件信息獲得對應倉儲的程序集名和類型名,然后通過“反射”獲取該倉儲類型的對象。倉儲層,提供對應不同數(shù)據(jù)庫(SQL Server、Oracle等)的數(shù)據(jù)庫訪問層。數(shù)據(jù)庫訪問層,直接與數(shù)據(jù)庫相連并對外提供增、刪、改、查等底層方法以供頂層調用,這里采用了微軟的 Code First框架來實現(xiàn)對數(shù)據(jù)庫的直接訪問,也就是數(shù)據(jù)訪問層。其中,基礎服務層和倉儲層都繼承了同一個接口IDataContextProvider,該接口在倉儲層得以實現(xiàn),從而實現(xiàn)了業(yè)務邏輯層、數(shù)據(jù)庫訪問層、數(shù)據(jù)庫三者之間的解耦。

  2.2 基礎服務層

  基礎服務層提供數(shù)據(jù)庫訪問層對外接口的定義和對內數(shù)據(jù)訪問的管理,是業(yè)務邏輯層和數(shù)據(jù)庫訪問在邏輯上的中間連接層。

  如圖2所示,DataContextService為基礎服務層的核心抽象類,業(yè)務邏輯層(如:DomainObjectContext Service類)實現(xiàn)該類型,以訪問該業(yè)務邏輯模塊所提供的數(shù)據(jù)相關的操作。各個業(yè)務層模塊針對自身模塊的數(shù)據(jù)訪問服務,必須繼承于該類。并重寫配置文件ConfigurationGuid,就可以實現(xiàn)通過配置文件探查到數(shù)據(jù)訪問層。本類為業(yè)務層和數(shù)據(jù)訪問層解耦提供基礎服務。該類實現(xiàn)了 IDataContextService接口,IDataContextService接口中定義了一個GetRepository()方法返回了一個 Repository泛型對象,該對象封裝了對數(shù)據(jù)庫的增、刪、改、查方法,并繼承了IQueryable即支持linq查詢。

  DataContextService里面ConfigureSectionName是配置文件配置節(jié)的名稱。當實現(xiàn) DataContextService的擴展類探查到數(shù)據(jù)庫訪問層后,將返回的倉儲對象與自己索引起來存入Dictionary(索引容器)里面,下次探查對應倉儲對象時就不需要再通過反射獲取對象,這樣可以提高代碼運行效率,本文的設計中多次用到這種方式來提升模塊性能。返回的倉儲對象才真正實現(xiàn)GetRepository()方法。

  2.3 倉儲層

  倉儲層為基礎服務層提供對應服務,Code first是以Dbcontext模型為容器把實體對象和數(shù)據(jù)庫建立起鏈接的,不同的實體對象可能屬于不同的容器,倉儲層就實現(xiàn)了具體的實體對象和對應的Dbcontext模型索引。

  如圖3所示,DataContextProvider為倉儲層的核心抽象類,實際的倉儲類(如DomainObjectContext Provider類)繼承該類型并實現(xiàn)CreateDbContextCore()虛方法,以提供該倉儲類對應數(shù)據(jù)庫訪問層即對應的DbContext的擴展類。DbContext的擴展類是讀數(shù)據(jù)庫訪問方法的最終提供者,EFRepository 類通過傳入不同的DbContext擴展類實現(xiàn)了IRepository接口。

  圖3 倉儲層結構

  2.4 數(shù)據(jù)訪問層

  數(shù)據(jù)訪問層實現(xiàn)了一套對不同的實體對象自動生成對應Dbcontext模型的機制,這樣外部業(yè)務邏輯層使用本模塊,通過泛型參數(shù)傳入實體類型,該機制就會對其自動生成屬于這個實體的Dbcontext模型。

  如圖4所示,該層基于EF的Code first方式配置模型實現(xiàn)對數(shù)據(jù)庫的訪問,DbContext繼承DbContext,重寫了數(shù)據(jù)庫鏈接字符串,并修改了EF庫對多個DbContext擴展類訪問同一數(shù)據(jù)庫沖突的漏洞,且實現(xiàn)了數(shù)據(jù)遷移特性即當實體類里有字段變化時,這種變化能自動移植到對應的數(shù)據(jù)表列。然后用戶可以繼承DbContext類根據(jù)自身的需求配置不同的實體對象執(zhí)行上下文環(huán)境,并向上提供給對應倉儲類。目前DbContext已支持Sqlserver之外的數(shù)據(jù)庫如Oracle,所以通過配置甚至可以實現(xiàn)對Oracle數(shù)據(jù)庫的訪問支持。

  3 應用研究

  本文實現(xiàn)的數(shù)據(jù)庫訪問模塊主要目的在于實際應用,為了更直接地展示其使用的快捷、簡單,下面通過實際例子加以說明。

  圖4 數(shù)據(jù)訪問層

  先定義一個實體類Person,繼承于DomainObject。這里DomainObject類只有一個Guid類型的字段。本模塊設計時對實體類做出了限制:任何實體類只有繼承于DomainObject類才能被映射到數(shù)據(jù)庫。

  public class Person:DomainObject {

  public string Name { get; set; }

  public int Age { get; set; }   }

  打開VS開發(fā)環(huán)境,建立一個控制臺應用,添加以下代碼:

  DomainObjectDataContextService.UsingDataContext( );

  Person me = new Person( ) { Name="張三",Age=24};

  using (var persons = DomainObjectDataContextService.Instance.GetRepository( )){

  persons.Add(me);

  persons.Save( );

  }

  如圖5所示,在這段代碼執(zhí)行之前在數(shù)據(jù)庫里沒有任何數(shù)據(jù)庫以及表。運行之后,在數(shù)據(jù)庫里可以看到如圖6結果,增加了YUNGO_SYS_DB2數(shù)據(jù)庫和People數(shù)據(jù)表以及一條新的記錄。

  <\192.168.6.11現(xiàn)代電子技術14年37卷第24期Image17T5.tif>

  圖5 執(zhí)行前數(shù)據(jù)庫

  刪除記錄操作代碼示例:

  using (var persons = DomainObjectDataContextService.Instance.GetRepository()){

  var p = from person in persons

  where person.Name == "張三"

  select person;

  persons.Remove(p.First());

  persons.Save();

  }

  查詢數(shù)據(jù)庫操作代碼示例

  using (var persons = DomainObjectDataContextService.Instance.GetRepository()){

  var p = from person in persons

  where person.Name == "張三"

  select person;

  string name = p.First().Name;

  int age = p.First().Age;

  }

  改記錄操作代碼示例

  using (var persons = DomainObjectDataContextService.Instance.GetRepository()){

  var p = from person in persons

  where person.Name == "張三"

  select person;

  p.First().Age=20;

  persons.Save(); }

  總的來說,通過實體框架的對象層,可以執(zhí)行以下任務:針對概念模型運行查詢;跟蹤針對對象做所需的更改;將對象更改傳播回數(shù)據(jù)源;將對象綁定到控件。

  圖6 執(zhí)行后數(shù)據(jù)庫

  4 結 語

  本文詳細分析了數(shù)據(jù)庫訪問機制的各部分結構,并介紹了應用方法。該機制缺點是不支持存儲過程,優(yōu)點是在進行數(shù)據(jù)庫操作時不需要建表,大量需要手動書寫代碼配置的映射關系通過泛型可以自動生成;高度封裝對外公開有限接口,所以使用時操作簡單;代碼結構清晰,各部分模塊化程度高,繼承體系完美,所以擴展性強,對于需定制的映射關系,修改方便。

  參考文獻

  [1] 袁立國,陳中育,李方鵬,等.一種軟件開發(fā)框架的設計優(yōu)化[J].計算機系統(tǒng)應用,2013,22(5):70?74.

  [2] 盧小垂.基于.NET平臺的ORM輕量級開發(fā)框架的設計與實現(xiàn)[J].電信快報,2012(10):10?16.

  [3] 趙亮.使用Entity Framework 快速開發(fā)ASQ.NET網(wǎng)站[J].企業(yè)導報,2012(18):269?270.

  [4] 黃睿.基于Java技術的ORM工具接口的設計與實現(xiàn)[D].長春:吉林大學,2012.

  [5] LERMAN Julia, MILLER Rowan. Programming entity framework: DbContext [M]. America: O'Reilly Media, 2012.

  [6] 謝日星.Entity Framework技術在分層架構中應用研究[J].電腦知識與技術,2011(15):3326?3327.

  [7] LERMAN Julia, MILLER Rowan. Programming Entity Framework: code first [M]. America: O'Reilly Media, 2012.

文章標題:電子技術論文基于.NET Entity Framework數(shù)據(jù)庫訪問機制的設計

轉載請注明來自:http://m.optiwork.cn/fblw/dianxin/dianzijishu/24457.html

相關問題解答

SCI服務

搜論文知識網(wǎng) 冀ICP備15021333號-3

主站蜘蛛池模板: 爽爽日本在线视频免费 | 深夜福利视频大全在线观看 | 91视频国产精品 | avtt天堂网永久资源手机版 | 国内精品影院久久久久 | 日韩成人小视频 | 欧美国产高清欧美 | 亚洲特黄视频 | 一本色道久久爱 | 久久.com| 在线视频一区二区三区在线播放 | 免费一级肉体全黄毛片 | 色吊丝在线观看国产 | 神马午夜视频 | 手机看片国产免费 | 久久久久久综合对白国产 | 精品久久久久久乐 | 免费一级欧美在线观看视频片 | 天堂精品高清1区2区3区 | 久久中文字幕亚洲精品最新 | 日本aaa视频 | 国产欧美日韩视频在线观看一区二区 | 日韩免费高清一级毛片在线 | 免费国产成人高清无线看软件 | 欧美a一级片 | 日本aa毛片a级毛片免费观看 | 免费区欧美一级毛片 | 欧美一级毛片一级毛片 | 久草免费在线观看视频 | 亚洲好视频 | 一级毛片视频免费观看 | 手机看片1024精品国产 | 欧美成人激情在线 | 理论片亚洲 | 久久精品一级 | 久久综合久久久久 | 亚洲社区在线观看 | 一级特黄aaa大片在线观看 | 99aiav国产精品视频 | 美女视频永久黄网站在线观看 | 国产精品久久久精品三级 |