请查看我在此处提出的问题中的代码:Data Access Layer returns DataTable。
我有数据传输对象来表示持久性实体。例如,假设我在数据库中有一个名为Customer的表和一个名为Order的表:
CREATE TABLE Customer(ID int,Name VARCHAR(100),Primary Key(ID)) CREATE TABLE Order(ID int,Name VARCHAR(100),Primary Key(ID))
假设我想从数据库中检索链接到客户的所有订单。我可以看到两个选项:
1)具有如下组合Customers和Orders的类型(注意Order数组):
Public Class CustomerOrder
Private _CustomerID As Integer
Private _Name As String
Private _OrderID() As Integer
Public Property CustomerID() As Integer
Get
Return _CustomerID
End Get
Set(ByVal value As Integer)
_CustomerID = value
End Set
End Property
Public Property Name() As Integer
Get
Return _Name
End Get
Set(ByVal value As Integer)
_Name = value
End Set
End Property
Public Property OrderID() As Integer()
Get
Return _OrderID
End Get
Set(ByVal value As Integer())
_OrderID = value
End Set
End Property
End Class
2)返回一个客户对象和一个订单对象列表。客户和订单将有自己的类型。
我相信选项1更好,但是如果类型应该只针对一个数据库表,我就会徘徊。
答案 0 :(得分:1)
这是一个品味的问题,以及你想要使用的设计模式。我在我的项目中使用了这两个选项。我建议您将Orders
属性创建为generic list
(或IEnumerable
个Order
个Private _OrderID As Integer()
Public ReadOnly Property OrderID() As Integer()
Get
If (_OrderID Is Nothing Or _OrderID.Length = 0) Then
GetOrders(_CustomerID)
End If
Return _OrderID
End Get
End Property
个对象,不要初始化它(null),并将其设为只读,所以如果你不必使用它,你不会浪费你不会使用的内存和处理时间。然后,当它被访问时,你可以直接填写它。
{{1}}
同样,我相信在这个具体情况下,任何最适合你的方案都是最好的选择。如果您只需要ID,请使用整数数组,如果您需要访问订单的其他属性,请使用数组,对象,linq或其他适合您的方法。