MyORM的使用 一

2021-04-20 19:59:35 字數 3609 閱讀 7455

之前把自己寫過的乙個簡單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,需要設定某些屬性時,不是逐選單地遍歷式搜尋,而是直接...