我正在使用通过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相同。
答案 0 :(得分:0)
我发现了:问题是我在另一个类中引用User类作为子对象,比如
public class Text
{
public virtual ICollection<User> Users { get; set; }
没有在用户类中指定任何外键列,并且EF试图通过它自己设置一个。
一旦我删除了上面的行,额外列就会从select
语句中消失。