我今天嘗試做一些實驗。我有一個應用程序使用無類型的數據表作爲模型實體。 他們都做出這樣的:未鍵入強類型數據表
Imports System.Data
Imports System.Runtime.Serialization
Imports System.ComponentModel
<DesignerCategory("Code"), system.Serializable()>
Partial Public Class SomeTable1
Inherits DataTable
#Region
Public Const TABLE_NAME As String = "SomeTable1"
Public Const FIELD_SomeField1 As String = "SomeField1"
Public Const FIELD_SomeField2 As String = "SomeField2"
#End Region
Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
MyBase.New(info, context)
End Sub
Public Sub New()
MyBase.New()
With Columns
.Add(FIELD_SomeField1, GetType(System.String)).DefaultValue = String.Empty
.Add(FIELD_SomeField2, GetType(System.Double)).DefaultValue = 0
End With
Dim keys(1) As DataColumn
keys(0) = Columns(FIELD_SomeField1)
TableName = TABLE_NAME
PrimaryKey = keys
End Sub
End Class
我目前正與EF工作,所以在我的球藝,我寫了這樣的事情(是的,這是VB):
Partial Public Class SomeTable1
Inherits DataTable
<Key()>
Friend Property SomePK1 As DataColumn
<Required(ErrorMessage:="SomeField1 is required.")>
<DataType(DataType.Text)>
Friend Property SomeField1 As DataColumn
<Required()>
<DataType(DataType.DateTime)>
Friend Property SomeField2 As DataColumn
...
Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
MyBase.New(info, context)
End Sub
Public Sub New()
MyBase.New()
SomeField2 = Date.Now
End Sub
End Class
我是在做夢上使之與前者相當,並且與當前的數據引擎完全兼容。
然後類型轉換錯誤(系統日期datacolumn)打破了我的希望。我必須承認,這是一個艱難的週末:)
因此,在我完全放棄改變之前,有沒有什麼方法可以編寫一個Typed數據表,因此它等同於上面的代碼,但帶有一些新的好東西? 這是如此古老的編程方式,我無法在網上找到任何東西。 在此先感謝。
如果我讀了這個權利,我想我會創建一個包裝庫類似的層。它會將dt對象與o/r映射器一起轉換爲您自己創建的新dto對象。代碼庫中的更高層使用這個存儲庫對象。中提琴,你已經鍵入集合。讓EF成爲第二種方式,也許你也將它傳遞到相同的存儲庫結構(分離的接口),並讓EF實現的更高級別也是未知的。 – Independent 2013-03-06 19:03:09
@Jonas,多麼有趣。但我很抱歉,我無法完全跟隨你。包裝知識庫般的圖層? 只是假設你正在和一些曾經使用asm/as400/cxm並且被迫去VB6然後VS的老人交談...並且有時候不能完全理解C#的東西(JAhJAh) 請告訴我更多。 – Sergio 2013-03-07 17:33:37