當前位置:成語大全網 - 書法字典 - 數據表與實體和實體集列表的區別與轉換

數據表與實體和實體集列表的區別與轉換

每個人都必須要麽完成了機房收費系統,要麽已經拿到手了。當初明確規定必須使用實體而不是Datatable。因為Datatable是直接面向數據庫的,我當時沒看懂,所以沒深究,就去實現代碼部分了。現在我終於完成了三層機房收費系統。當我回頭看時,我有點明白了。

去年兄弟姐妹用Datatable,都實現了三層。我們在互聯網上搜索了壹些小圓頂,它們都是數據表,所以我們會發現這是否真的有意義。

那麽我們先來看看Datatable和Dataset。在CSDN,他談論的是記憶中的壹張桌子。事實上,我們也可以直接將Datatable識別為在數據庫中找到的表。比如妳要查學生信息,那麽電腦上的學生信息表就是我們所說的Datatable。在CSDN,數據集被解釋為數據的內存駐留表示,無論它包含什麽數據源,它都提供了壹致的關系編程模型。數據集代表整個數據集,其中包含包含、排序和約束數據的表以及表之間的關系。那麽我們把它理解為內存數據庫,內存中存儲了多個表,也就是多個Datatable的集合,壹個小型數據庫。

也就是說,如果我們在層間使用Datatable,即數據庫中的表,但在我們的三層實現中,我們內部的結構實際上只有UI層、BLL層、DAL層和實體層,沒有Datatable的狀態可言,因此我們可以通過這種方式方便地查詢知識。

但是在這種情況下,我們的實體層似乎沒有用,特別是在查詢時,我們的目的是查詢事物然後顯示它們,但是如果顯示Datatable,那麽實體層就是開銷。

然後我們來談談實體和列表。如果把單個實體比作壹個學生,那麽列表就是很多學生,但前提是他們都是學生。實體是壹維的,而數據表是二維的。如果您不理解,那麽請將實體理解為壹行,將Datatable理解為壹個表。實體本身是壹些對象的特定屬性的集合。數據表中列的屬性壹次反映在實體中。

那麽為什麽要這樣做呢?為什麽要轉換發現的結果?當然,當我們制定壹個制度時,我們是從好的方面去做的,但當我們思考這個問題時,我們必須想到最壞的地方:這個制度不會壹下子就完成,這個制度仍然需要改變。我需要很多人來幫助我這個系統,這個系統仍然不完善。當我們提出這些“不好”的考慮時,我們會發現如果我們返回Datatable,我們應該更改什麽?怎麽改?我看不到Datatable中的信息。之後,我必須找到數據庫。如果我需要有人幫助我,在那之後,其他人不知道Datatable中有什麽,我必須查看數據庫。如果我將來需要修改它怎麽辦?過了很久,我忘了,我得去找數據庫。

所以妳有沒有發現,只要改變了,我們需要的是數據庫,它暴露了核心數據。怎麽會這樣呢?這就是為什麽我們的前輩發明了實體這種東西。

正如我之前所說,我們為什麽不使用Datatable?即使它實現起來相對簡單,我們仍然需要對它進行轉換。現在我將展示它們是如何轉變的。

如果我們查詢壹條數據,那麽我們將把數據表轉換成壹個實體。DStudent是這種轉變的實體。

& ltspan style =“font-size:14px;”& gt& ltspan style =“font-size:14px;”& gt如果查詢道德表中的列數不為0,則需要查詢的列的數據被傳遞給學生實體。

如果表。行數。計數& lt& gt那就0

學生。Student_No =表。行數(0)。項目(“學生編號”)

學生。學生姓名=表格。行數(0)。項目(“學生姓名”)

學生。性=桌子。行數(0)。項目(“性”)

學生。部門=表格。行數(0)。項目(“部門”)

學生。等級=表。行數(0)。項目(“等級”)

學生。StuClass =table。行數(0)。項目(“StuClass“)

學生。IsExist =table。行數(0)。項目(“IsExist“)

學生。收費=表。行數(0)。項目(“收費”)

學生。Card _ ID =表。行數(0)。項目(“卡標識”)

如果…就會結束

返回實體學生

返回學生

& lt/span>。& lt/span>。

這樣以後我們修改或者讓別人看到就方便多了。

列表法也很方便。Knowledge遍歷Datatable中的屬性,然後當然是先給List(T)添加壹個方法,然後直接調用該方法,這就是壹次成功的轉換。

& ltspan style =“font-size:14px;”& gt& ltspan style =“font-size:14px;”& gt公共共享函數Convert to list(of t as { new })(by valdt as datatable)as ilist(of t)‘將datatable轉換為泛型集合。

註意:1,convert tolist(Of T As { New })這裏的New是用來約束T的,必須存在,否則使用new T時會出錯。

新的約束在C#和VB.NET中的寫法不同,C#中使用where來約束t

‘dim my List As New List(Of T)‘定義最終返回的集合。

dim myTpye As Type = GetType(T)‘以獲取實體類的類型名稱。

“Dim dr As DataRow”定義行集。

Dimtempname as string = string。“empty”定義壹個臨時變量。

遍歷DataTable的所有數據行。

對於dt中的每個dr。行

‘dim myT As New T‘定義壹個實體類的對象。

dim properties()as property info = myt . gettype()。“getproperties()”定義屬性集。

Dim Pr As PropertyInfo

遍歷對象的所有屬性。

對於屬性中的每個Pr

TempName = Pr。“名稱”將屬性名稱分配給臨時變量。

檢查數據表是否包含此列(列名= =對象的屬性名)。

if(dt。columns . contains(tempname))T將此屬性與datatable中的列表進行比較,以查看datatable是否包含此屬性。

確定此屬性是否有Setter。

如果(pr。can write = false)t判斷此屬性是否可寫,如果不可寫,則跳出此循環。

繼續

如果…就會結束

Dim值為object = trim(dr(tempname)。“tostring)”定義壹個對象變量來保存列值。

If(值。ToString()& lt;& gtDbnull.value.tostring()如果不為空,則為分配給對象的屬性。

對SetValue(myT,Value,Nothing)‘在操作過程中通過反射動態訪問對象的屬性。

如果…就會結束

如果…就會結束

然後

我的名單。將(myT)‘添加到集合中。

然後

“Return myList”返回實體的集合。

End函數& lt/span>。& lt/span>。

當我們意識到這壹點時,我們只需要補充壹句話

& ltspan style =“font-size:14px;”& gt& ltspan style =“font-size:14px;”& gtmy list = Entity helper . convert tolist(Of Entity。取消卡實體)(表)

返回我的列表& lt/span>。& lt/span>。

實體、實體集和數據表的比較如果用得好,肯定會提高靈活性,所以在未來的研究中,我們是否也應該考慮為什麽要這樣做,如果不這樣做會發生什麽?