使用entity framework一般需要對映三種型別的物件,即實體、聚合、值物件。
聚合與實體對映的主要區別是:聚合對映單屬性標識id,並需要對映樂觀離線鎖version,而實體的標識往往需要對映成復合屬性,這樣方便物理刪除聚合中的實體。entity framework通過entitytypeconfiguration進行實體對映。
值物件以嵌入值模式對映,這需要使用complextypeconfiguration。
封裝對映配置並不是必須的,但封裝以後可以獲得如下好處。
1. 輔助記憶。
如果你跟我一樣記憶力很差,記不住上面兩個類名,那麼通過封裝乙個自定義的型別可以幫助你進行記憶。一旦封裝完成,你就可以把系統或第三方的api扔到一邊。
2. 劃分邏輯結構。
把所有對映**放到乙個方法,不方便閱讀,我把它們劃分成不同的方法,可以獲得更清晰的結構。
3. 減少**冗餘。
對於聚合而言,可以把id標識和version樂觀離線鎖封裝到層超型別,從而減少**冗餘。
entitymapbase從entitytypeconfiguration繼承,泛型引數tentity使用ientity介面約束,構造方法將對映配置從邏輯上分離到4個方法中,即對映表、對映標識、對映屬性、對映導航屬性。
在構造方法中呼叫虛方法有時候可能導致意想不到的錯誤,這種情況發生在子類構造方法的**依賴某些虛方法,由於呼叫順序混亂可能導致失敗,不過這種情況還是比較少見,如果你碰到上述問題,請果斷扔掉該對映基類,直接從entitytypeconfiguration派生。
entitymapbase用於對映實體,**如下。
usingsystem.data.entity.modelconfiguration;
using
util.domains;
namespace
util.datas.ef
//////
對映表
/// protected
abstract
void
maptable();
//////
對映標識
/// protected
abstract
void
mapid();
//////
對映屬性
/// protected
virtual
void
}//////
對映導航屬性
/// protected
virtual
void
mapassociations()
}}
另外,提供了兩個泛型版本的aggregatemapbase, 提供aggregatemapbase的目的是使聚合對映更易用,因為我的大多數聚合都使用guid型別,這樣可以省乙個引數。
aggregatemapbase用於對映聚合,**如下。
usingsystem;
using
system.componentmodel.dataannotations.schema;
using
util.domains;
namespace
util.datas.ef
//////
對映屬性
/// protected
override
void
property( t => t.version ).hascolumnname( "
version
").isrowversion().hasdatabasegeneratedoption( databasegeneratedoption.computed ).isoptional();}}
//////
聚合根對映
/// ///
聚合根型別
public
abstract
class aggregatemapbase: aggregatemapbasewhere tentity : aggregateroot
}
valueobjectmapbase從complextypeconfiguration繼承,它唯一需要的就是對映屬性,建立這個類只有乙個原因——幫助你記憶。
valueobjectmapbase用於對映值物件,**如下。
usingsystem.data.entity.modelconfiguration;
namespace
util.datas.ef
//////
對映屬性
/// protected
abstract
void
}}
之所以說對映基類不是必須的,是因為對映配置一般由**生成器建立,所以能夠從基類獲得的好處不是非常明顯。另外,很多人會覺得這導致過度封裝。建立這幾個類在很大程度上屬於我個人習慣問題,介紹它們的目的是想告訴你,如果不想動腦筋記憶,就自己封裝一層。
.net應用程式框架交流qq群: 386092459,歡迎有興趣的朋友加入討論。
應用程式框架實戰三 什麼是應用程式框架
什麼是應用程式框架?正如框架是架構的具體實現一樣,應用程式框架是應用程式架構的具體實現。不過這樣說了等於沒說,因為框架和架構都是如此抽象。為了獲得直觀的感受,下面先看看更具體的.net framework和第三方框架。net framework為.net程式設計師提供了乙個龐大的類庫,幾乎任何開發任...
應用程式框架實戰六 應用程式框架的特點
之前說過,net framework為所有.net程式設計師提供底層支援,第三方開源框架建立在.net framework的基礎上,專門解決某些特定問題,而應用程式框架則建立在.net framework和第三方框架的基礎上,為專案開發的方方面面保駕護航。它們的作用雖然都是幫助程式設計師更好的建立應...
應用程式框架實戰三 什麼是應用程式框架
什麼是應用程式框架?正如框架是架構的具體實現一樣,應用程式框架是應用程式架構的具體實現。不過這樣說了等於沒說,因為框架和架構都是如此抽象。為了獲得直觀的感受,下面先看看更具體的.net framework和第三方框架。net framework為.net程式設計師提供了乙個龐大的類庫,幾乎任何開發任...