Я использую EF5 и .NET 4.5, ориентируясь на базу данных Oracle 11g через Oracle.ManagedDataAccess.Client. Я установил небольшую таблицу, чтобы проверить, как это работает. А теперь вот странный факт, который не дает результатов ни при поиске в Интернете, ни на этом сайте. В каждом запросе у меня есть последний столбец, например "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
user3346850 17 Мар 2014 в 20:47

1 ответ

Лучший ответ

Я нашел это: проблема заключалась в том, что я ссылался на класс User в другом классе как на дочерний объект, например

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

Без указания какого-либо столбца внешнего ключа в пользовательском классе, и EF пытался установить его самостоятельно. Как только я удалил строку над лишним столбцом, он исчез из оператора select.

0
user3346850 20 Мар 2014 в 10:34