2013-02-01 57 views
4

我有一個簡單的edmx帶有2個表。這些表格由一個Navigation Property相關。 (1到很多)。EF檢索數據時出錯:SQL中的表名錯誤

當我運行我的代碼,我得到一個例外:「無效的對象名稱dbo.Enquiries」

有一個在數據庫中沒有dbo.Enquiries(它實際上是所謂的dbo.Enquiry),所以錯誤本身是自我解釋。 但是,它在哪裏發現名稱,我該如何解決?

被編輯爲按要求顯示代碼。

var foo = (from d in context.Dealerships 
      join e in context.Enquiry 
       on d.Id equals e.DealershipId 
      where (d.ParentBusinessId == id) 
      select d).AsEnumerable(); 

這裏是生成的sql。

foo {SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[BusinessName] AS [BusinessName] 
FROM [dbo].[Dealerships] AS [Extent1] 
INNER JOIN [dbo].[Enquiries] AS [Extent2] ON [Extent1].[Id] = 
[Extent2].[DealershipId] 
WHERE [Extent1].[ParentBusinessId] = @p__linq__0} 

但對我的生活中,我看不到的地方/它是如何決定更改名稱查詢對內部查詢加入。

+0

當你運行「的」代碼? –

+0

我沒有看到顯示代碼的任何一點,因爲它所做的只是嘗試從兩個表中拉入。如果我然後在調試器中調查,那麼主表中的數據就在那裏,但不是次要的。調試器中的SQL顯示它正在查找錯誤的表,因此這對於我認爲的設計人員來說是個問題,但我將編輯以顯示代碼。 – Matt

回答

0

嘗試從edmx中刪除表並更新模型後。

+0

Did not make any difference Im afraid – Matt

0

看來你正在使用基於模型的開發。如果是這樣的話,那麼你似乎在模型中做了一些改變,但沒有將它們反映到數據庫中。

使用選項從模型生成數據庫,它將使數據庫與模型同步。

+0

不,數據庫已經存在,我從現有的數據庫生成模型。 – Matt

+0

你能再次嘗試「從數據庫更新模型」嗎? – daryal

+0

沒有區別,對不起。 – Matt

0

嘗試關閉EF模型的圖形視圖。 右鍵單擊編輯並在XML編輯器中打開。 映射到表應該在那裏,你可以糾正它。 或 如果您從導入/更新後chnaged模式,您可以完全刪除模型並再次導入模型。
訪問模型的代碼應該仍然可以。

+0

映射看起來是正確的,搜索整個文件查詢顯示沒有結果。 我刪除了整個模型,重新啓動電腦,重新創建它,它仍然存在。 我的代碼調試器顯示context.Enquiry是調用表查詢,所以它是一些基本的事情正在進行,尤其是當我關閉了多元化。 – Matt

+0

哇,哪個版本的EF? –

+0

通過在此線程中的其他地方添加代碼塊來解決此問題。我只是不能標記爲回答2天。 – Matt

4

找到答案。多元化只在模型生成上。我必須明確地告訴我的DbContext不Pluralise的名字(我不敢開始重命名該數據庫,因此Im堅持使用了奇怪的約定。)

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 
+0

+1,但您可能會發現在使用現有數據庫時,您可以使用配置來明確指定表名。例如,即使您的表名不符合,您也可以使用符合C#編碼標準的類名稱。 – Olly