2013-12-23 59 views
0

我不得不使用客戶ID來從數據庫中獲取客戶的簡單方法:創建與LINQ和EF對象沒有定義其字段

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

你爲什麼不直接返回'C'? EF將自動填充所有屬性(包括'billingPoint')。 – glautrou

回答

1

我假設你問的是因爲你的對象模型不包含客戶對象上類型爲BillingPoint的顯式映射關係屬性,而只是通過BillingPoint上的customerId屬性在兩個實體之間建立隱式關係。

如果你想保持你的模型是這樣的,這在許多情況下都是有效的,你可以考慮將查詢結果映射到CustomerDTO類型。這可以使用自動AutoMapper及其可查詢分機完成:

https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions

0

您可以使用Entity框架已經生成的類,而不需要用屬性重新創建類型,除非您需要特定類型的模型,那麼您必須手動執行映射,或者編寫通用通過「名稱」將列映射到特定屬性的擴展名

0

快速構思:不確定這是否可行,然後,你可以不喜歡;:

Select New Customer(c, bc) 

您可能需要使用獲得對As Enumerable儘管實現這一目標,這意味着你將需要照顧不來獲取和遍歷多個結果比你需要的結果。