2011-05-04 63 views
1

我是新來使用LINQ to SQL和我有一個問題LINQ到1 SQL預先加載到許多和多對多的關係船舶

這是我的模型的一部分:

  • 訪問> VisitProduct <產品
  • 訪問> VisitSample <產品
  • 訪問> VisitStatus

我想加載所有相關實體的訪問實體,但它給了我一個「InvalidCastexception」。 ,我用這個代碼:(?我不知道爲什麼發生這種情況

using (TeamsExcellenceDataContext context = new TeamsExcellenceDataContext()) 


{ 


      DataLoadOptions lo = new DataLoadOptions(); 
      context.DeferredLoadingEnabled = false; 
      lo.LoadWith<Visit>(v => v.Visitstatus); 
      lo.LoadWith<Visit>(v => v.VisitProducts); 
      lo.LoadWith<Visit>(v => v.VisitSamples); 

      context.LoadOptions = lo; 
      var temp = (from v in context.Visits 
        where v.VisitID == visitID 
        select v).Single(); 
      Visit v = temp; 
     } 

生成的SQL語句被分成兩個部分:

SELECT [t0].[VisitID], [t0].[StartDate], [t0].[EndDate], [t0].[TypeID], [t0].[StatusID], [t0].[NextObjective], [t0].[CpFeedback], [t0].[Feedback], [t0].[AccID], [t0].[CustMPID], [t0].[AccTreeID], [t0].[RepPermitDays], [t0].[ModeTypeID], [t0].[Recurrence], [t0].[RecurrenceParentKey], [t0].[CDate], [t2].[VisitID] AS [VisitID2], [t2].[ProductID], [t2].[VisitProductTurn], [t2].[CDate] AS [CDate2], (
    SELECT COUNT(*) 
    FROM [dbo].[VisitProducts] AS [t3] 
    WHERE [t3].[VisitID] = [t0].[VisitID] 
    ) AS [value], [t1].[VisitStatusID], [t1].[VisitStatusName], [t1].[VisitStatusMarker], [t1].[CDate] AS [CDate3] 
FROM [dbo].[Visits] AS [t0] 
INNER JOIN [dbo].[Visitstatus] AS [t1] ON [t1].[VisitStatusID] = [t0].[StatusID] 
LEFT OUTER JOIN [dbo].[VisitProducts] AS [t2] ON [t2].[VisitID] = [t0].[VisitID] 
WHERE [t0].[VisitID] = @p0 
ORDER BY [t0].[VisitID], [t1].[VisitStatusID], [t2].[ProductID] 
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [411] 
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1 

SELECT [t0].[VisiteID], [t0].[ProductID], [t0].[SampleQuantity], [t0].[CDate] 
FROM [dbo].[VisitSamples] AS [t0] 
WHERE [t0].[VisiteID] = @x1 
-- @x1: Input Int (Size = -1; Prec = 0; Scale = 0) [411] 
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1/ 

的異常不會不會發生如果我省略這一行:

lo.LoadWith<Visit>(v => v.Visitstatus); 

或任何這些線路的

lo.LoadWith<Visit>(v => v.VisitSamples); 
lo.LoadWith<Visit>(v => v.VisitProducts); 

我做錯了什麼或我該如何解決此問題?

回答

0

問題是引發異常InvalidCastexception導致表的主鍵Visitstatus是tinyint類型,顯然Linq To SQl有這個DB數據類型的問題,所以我改變了tinyint類型爲int,它的工作原理! !

所以這在這裏引發了一個問題如果我不允許更改數據庫設計或者使用數據庫類型tinyInt是非常重要的有什麼解決方法嗎?

+0

然後你應該在你的模型中使用字節而不是int。 TinyInt轉換爲字節。 – 2012-04-24 06:52:54