之前把自己寫過的乙個簡單orm類庫介紹了下,考慮到**會有改動而blog中編輯**太麻煩,在codeplex上建了乙個專案:myorm,相關**和檔案維護起來方便不少。
簡單說一下自己寫orm的目的,個人不喜歡把實體物件搞得太複雜,因為在系統中實體是作為資料載體存在的,如果還要讓它負責資料庫操作、實體關係,往往會造成很多問題。
另外就是現有的orm並不是太好用,比如說在顯示到介面時不方便,或者效率太低,我的方法是給實體型別定義乙個view用來顯示。還有查詢也不是很好用,我的想法是簡單的查詢可以定義統一的查詢方式,複雜的查詢通過自己寫sql然後封裝成方法,如果複雜的查詢還要定義成統一的方式那就另外自己開發吧。
以northwind的資料庫做例子,實體的定義可能是下面這樣:
[table("products")]
[serializable]
public
class products
set
}[column]
public
string productname
set
}[column]
public
int? supplierid
set
}[column]
public
int? categoryid
set
}[column]
public
string quantityperunit
set
}[column]
public
decimal? unitprice
set
}[column]
public
short? unitsinstock
set
}[column]
public
short? unitsonorder
set
}[column]
public
short? reorderlevel
set
}[column]
public
bool discontinued
set
} #endregion
}而在顯示到介面的時候直接顯示supplierid和categoryid是不合適的,而應該顯示對應物件的名稱或者其他內容,因此需要再定義乙個view:
[tablejoin(typeof(categories), "categoryid", aliasname = productsview.category)]
[tablejoin(typeof(suppliers), "supplierid", aliasname = productsview.supplier)]
public
class productsview : products
set
}[column("description", foreign = productsview.category, columnmode = columnmode.read)]
public
string category_description
set
}[column("picture", foreign = productsview.category, columnmode = columnmode.read)]
public
byte category_picture
set
}[column("companyname", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_companyname
set
}[column("contactname", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_contactname
set
}[column("contacttitle", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_contacttitle
set
}[column("address", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_address
set
}[column("city", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_city
set
}[column("region", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_region
set
}[column("postalcode", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_postalcode
set
}[column("country", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_country
set
}[column("phone", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_phone
set
}[column("fax", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_fax
set
}[column("homepage", foreign = productsview.supplier, columnmode = columnmode.read)]
public
string supplier_homepage
set
} #endregion
} 然後在使用的時候像下面這樣:
datagridview1.datasource = new productsviewdao().search(null);
就可以顯示所有productsview的內容。products和productsview是通過codesmith生成,完全可以按照自己的需要修改。
productsdao和productsviewdao下次再介紹。
Animations的使用(一)
animation的分類 一,tweened animations。旋轉,移動,伸展,淡出等效果。二,frame by frame animations。可建立乙個drawable序列,按照指定的時間間隔乙個個顯示。tweened animations分類 1,alpha 淡入淡出 2,scale ...
Vim的使用(一)
命令操作h 游標向左移動乙個字元 j游標向下移動一行 k游標向上移動一行 l游標向右移動乙個字元 命令操作 w將游標移動到下乙個單詞的首字元 b將游標移動到上乙個單詞的首字元 e將游標移動到下乙個單詞的最後乙個字元 ge將游標移動到上乙個單詞的最後乙個字元 w將游標移動到下乙個空格的首字元 b將游標...
CLion 的使用(一)
首先是找到設定 toolchains 的位置,file setings 直接在搜尋框中輸入 toolchains,然後把 mingw 的 home 目錄 也即根目錄,而不是 bin 目錄 作為 mingw 的 home。所以對於一些複雜的 ide,需要設定某些屬性時,不是逐選單地遍歷式搜尋,而是直接...