2012-08-10 50 views
3

我有一個LINQ到實體查詢(EF 4.3)指示LINQ到實體,以生成與Oracle兼容SQL

var query = from item in db.TableTest 
      select item.VAL; 

它轉換爲這條SQL語句

SELECT 
"Extent1"."VAL" AS "VAL" 
FROM "dbo"."TEST_TABLE" "Extent1" 

數據庫是甲骨文

當我執行查詢時,我得到消息,數據表不存在。問題是(「dbo」)部分。如果我刪除它並直接執行此查詢(不通過LINQ,但通過oracleconnection等)

SELECT 
"Extent1"."VAL" AS "VAL" 
FROM "TEST_TABLE" "Extent1" 

然後一切正常。我回到了價值觀。

如何指示Linq To Entities輸出Oracle兼容的SQL

回答

1

詢問後不久,我發現了一個方法來解決我的問題

我有這個POCO類

[Table("TEST_TABLE")] 
public class MyEntity 
{ 
    [Key, Column("VAL")] 
    public string key_valye { get; set; } 
} 

生成的SQL注入 「DBO」。當我將表格屬性更改爲

[Table("TEST_TABLE", Schema="ATT")] 

這生成了「ATT」。「TEST_TABLE」,而實際上它是正確的SQL。

2

假設您有一個實體模型,請確保您正確設置了DDL生成模板。

此外,您可以刪除數據庫模式名稱的dbo以匹配您的實際DB。

enter image description here

+0

感謝您的快速回復。我不允許在數據庫中更改任何內容。我也是一位oracle新手。 我沒有實體模型。我使用POCO類。我發現通過使用[Table(「TABLE_NAME」,Schema =「SCHEMA_NAME」)]屬性註釋我的實體類,我解決了問題 – 2012-08-10 15:20:53

+0

@Saysmaster我不知道如果您是先使用代碼還是模型優先方法沒有指定)。在我的回答中,我假設你使用的是實體模型,所以我展示瞭如何修改模型的'Schema'屬性。由於您實際上首先使用代碼,因此您必須手動更改屬性中的「Schema」屬性,就像您自己找到的那樣。 – ken2k 2012-08-10 15:23:56

+0

由於某些原因,我無法從此數據庫中自動生成實體模型。這主要是由於生成器無法在表上找到主鍵。所以我嘗試創建POCO類並將它們手動映射到我想要的表格 – 2012-08-10 15:27:07