实体框架生成的查询中的其他列

时间:2014-03-17 16:47:53

标签: oracle oracle11g entity-framework-5

我正在使用通过Oracle.ManagedDataAccess.Client定位Oracle 11g数据库的EF5和.NET 4.5。我设置了一个小表来测试它的工作原理。 现在这里有一个奇怪的事实,它没有显示搜索网站或本网站的结果。在每个查询中,我都有最后一列,如"Extent1"."Text_TextID"!这显然会导致Oracle抛出错误Invalid identifier,因为我没有这样的名称列,也没有数据库中的其他对象。 无论我有多少表/列,无论我如何命名它们都会发生这种情况(如果我有多个表,则查询中都会有这个额外的列)。

任何人都知道为什么会这样?

以下示例代码:

//POCO class and mapping
[Table("LO_USERS")]
public class User 
{
    [Key]
    [Column("USER_ID")]
    public int UserID { get; set; }
}

//define the context

public class TestContext : DbContext
{
    public TestContext():base("OracleConn")
    {
    }

    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //replace the annoying dbo schema name. Note: even if I remove this, I still get the extra column in the query
        modelBuilder.Entity<User>().ToTable("LO_USERS", "TEST_SCHEMA");
    }

//create a new user
    using (var db = new TestContext())
        {
            var user = new User();
            db.Users.Add(user);
            //here I set a breakpoint
            db.SaveChanges();
        } 

VS2012在断点处显示的查询:

SELECT 
1 AS "C1", 
CAST( "Extent1"."USER_ID" AS number(10,0)) AS "C2",
"Extent1"."Text_TextID" AS "Text_TextID"
FROM "TEST_SCHEMA"."LO_USERS" "Extent1"

修改

与EF6和DotConnect相同。

1 个答案:

答案 0 :(得分:0)

我发现了:问题是我在另一个类中引用User类作为子对象,比如

public class Text 
{
    public virtual ICollection<User> Users { get; set; }

没有在用户类中指定任何外键列,并且EF试图通过它自己设置一个。 一旦我删除了上面的行,额外列就会从select语句中消失。