我今天尝试做一些实验。我有一个应用程序使用无类型的数据表作为模型实体。 他们都做出这样的:未键入强类型数据表
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