2012-08-10 49 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