2010-12-16 98 views
2

我有一個實體框架模型,有兩個表,客戶端和郵政編碼。郵政編碼可以有很多客戶,客戶可以有1個郵政編碼。他們加入郵編。 這兩個表被映射到視圖。實體框架對象缺少相關數據

我有一些客戶在模型中沒有郵政編碼,但是在他們的數據庫中呢!

我跑了一些測試,並發現當我做Postcode.Clients返回客戶端的郵政編碼,但不是所有的客戶端?在db中,郵編有14個相關的客戶端,但是EF只返回了前6個。基本上某些郵編沒有返回所有的數據。

懶惰加載打開,我試圖關閉它沒有任何運氣。

任何想法?

我使用VS 2010,C#,.NET 4.0,EF4和SQL Server 2008

感謝

UPDATE:

我走過這LinqPad已經運行。我嘗試下面的代碼

Client c = Clients.Where(a => a.ClientId == 9063202).SingleOrDefault(); 
c.PostcodeView.Dump(); 

這將返回null。

我再取生成的SQL,並在一個單獨的SQL查詢運行這個,它工作正常(在我的@添加到變量名的開始)

SELECT TOP (2) 
[Extent1].[ClientId] AS [ClientId], 
[Extent1].[Surname] AS [Surname], 
[Extent1].[Forename] AS [Forename], 
[Extent1].[FlatNo] AS [FlatNo], 
[Extent1].[StNo] AS [StNo], 
[Extent1].[Street] AS [Street], 
[Extent1].[Town] AS [Town], 
[Extent1].[Postcode] AS [Postcode] 
FROM (SELECT 
     [ClientView].[ClientId] AS [ClientId], 
     [ClientView].[Surname] AS [Surname], 
     [ClientView].[Forename] AS [Forename], 
     [ClientView].[FlatNo] AS [FlatNo], 
     [ClientView].[StNo] AS [StNo], 
     [ClientView].[Street] AS [Street], 
     [ClientView].[Town] AS [Town], 
     [ClientView].[Postcode] AS [Postcode] 
     FROM [dbo].[ClientView] AS [ClientView]) AS [Extent1] 
WHERE 9063202 = [Extent1].[ClientId] 
GO 

-- Region Parameters 
DECLARE @EntityKeyValue1 VarChar(8) = 'G15 6NB' 
-- EndRegion 
SELECT 
[Extent1].[Postcode] AS [Postcode], 
[Extent1].[ltAstId] AS [ltAstId], 
[Extent1].[ltLhoId] AS [ltLhoId], 
[Extent1].[ltChcpId] AS [ltChcpId], 
[Extent1].[ltCppId] AS [ltCppId], 
[Extent1].[ltWardId] AS [ltWardId], 
[Extent1].[ltAst] AS [ltAst], 
[Extent1].[ltCpp] AS [ltCpp], 
[Extent1].[ltWard] AS [ltWard], 
[Extent1].[WardNo] AS [WardNo], 
[Extent1].[Councillor] AS [Councillor], 
[Extent1].[ltAdminCentre] AS [ltAdminCentre], 
[Extent1].[ltChcp] AS [ltChcp], 
[Extent1].[Forename] AS [Forename], 
[Extent1].[Surname] AS [Surname], 
[Extent1].[AreaNo] AS [AreaNo], 
[Extent1].[LtAomId] AS [LtAomId], 
[Extent1].[OOHltCoordinatorId] AS [OOHltCoordinatorId], 
[Extent1].[OvernightltCoordinatorId] AS [OvernightltCoordinatorId], 
[Extent1].[DayltCoordinatorId] AS [DayltCoordinatorId] 
FROM (SELECT 
     [PostcodeView].[Postcode] AS [Postcode], 
     [PostcodeView].[ltAstId] AS [ltAstId], 
     [PostcodeView].[ltLhoId] AS [ltLhoId], 
     [PostcodeView].[ltChcpId] AS [ltChcpId], 
     [PostcodeView].[ltCppId] AS [ltCppId], 
     [PostcodeView].[ltWardId] AS [ltWardId], 
     [PostcodeView].[ltAst] AS [ltAst], 
     [PostcodeView].[ltCpp] AS [ltCpp], 
     [PostcodeView].[ltWard] AS [ltWard], 
     [PostcodeView].[WardNo] AS [WardNo], 
     [PostcodeView].[Councillor] AS [Councillor], 
     [PostcodeView].[ltAdminCentre] AS [ltAdminCentre], 
     [PostcodeView].[ltChcp] AS [ltChcp], 
     [PostcodeView].[Forename] AS [Forename], 
     [PostcodeView].[Surname] AS [Surname], 
     [PostcodeView].[AreaNo] AS [AreaNo], 
     [PostcodeView].[LtAomId] AS [LtAomId], 
     [PostcodeView].[DayltCoordinatorId] AS [DayltCoordinatorId], 
     [PostcodeView].[OOHltCoordinatorId] AS [OOHltCoordinatorId], 
     [PostcodeView].[OvernightltCoordinatorId] AS [OvernightltCoordinatorId] 
     FROM [dbo].[PostcodeView] AS [PostcodeView]) AS [Extent1] 
WHERE [Extent1].[Postcode] = @EntityKeyValue1 
+1

顯示一些代碼可能會有所幫助。 – Yakimych 2010-12-16 12:50:34

+0

我不知道你在這裏問什麼 - 但你有沒有嘗試過急切的加載:'Client c = Clients.Include(「Postcode」)。Where(a => a.ClientId == 9063202).SingleOrDefault();'btw - 你可以在'SingleOrDefault'方法中使用謂詞 - 你不需要Where方法。 – RPM1984 2010-12-16 20:55:56

+0

@ RPM1984 - 我認爲這裏的問題在於,實體框架生成的SQL語句在直接在sql中運行時返回不同的結果,而與使用關聯訪問客戶端和郵編時發生的情況相反 – littlechris 2010-12-16 23:26:59

回答

0

端卻取消的關係和手動獲取兒童數據。 討厭,但無法找到發生這種情況的原因。歡呼的評論