我有一个简单的方法,用于通过customerId从数据库中获取客户:
Public Function GetCustomer(ByVal id As Long) As Customer
Using ctx As New MyEntities
Dim e = (From c In ctx.customers
Join bp In ctx.billingpoints
On c.customerId Equals bp.customerId
Select New Customer With {
.customerId = c.customerId
.billingPoint = New BillingPoint With{
.customerId = bp.customerId
.billingPointId = bp.billingPointId
'tons of more fields
}
'tons of more fields
})
Return e
End Using
End Function
此方法返回如下定义的Customer对象:
Public Class Customer
Public Property customerId As Long
Public Property billingPoint As BillingPoint
'many more fields
End Class
正如您所看到的,设置所有属性看起来很糟糕。有没有更有效的方法呢?
答案 0 :(得分:1)
我假设你问,因为你的对象模型不包含客户对象上BillingPoint类型的显式映射关系属性,而只是通过BillingPoint上的customerId属性在两个实体之间隐含关系。
如果你想保留这样的模型,这在许多情况下都是有效的,你可以考虑将查询结果映射到CustomerDTO类型。这可以使用AutoMapper及其可查询扩展名自动完成:
https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions
答案 1 :(得分:0)
您可以使用Entity框架已经生成的类,而无需使用属性重新创建类型,除非您需要特定类型的模型,然后您必须手动执行映射,或者编写通用扩展通过“名称”
将列映射到特定属性答案 2 :(得分:0)
快速提示:不确定这是否有效,但您可以在Customer
中添加一个构造函数,它将实体结果中的对象作为输入参数。然后你可以做类似的事情:
Select New Customer(c, bc)
您可能必须使用As Enumerable
来获得结果才能实现此目的,这意味着您需要注意不要获取和迭代比您需要的更多结果。