Я использую 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.
1 ответ
Я нашел это: проблема заключалась в том, что я ссылался на класс User в другом классе как на дочерний объект, например
public class Text
{
public virtual ICollection<User> Users { get; set; }
Без указания какого-либо столбца внешнего ключа в пользовательском классе, и EF пытался установить его самостоятельно. Как только я удалил строку над лишним столбцом, он исчез из оператора select
.
Похожие вопросы
Новые вопросы
oracle
Oracle Database - это многомодельная система управления базами данных, созданная корпорацией Oracle. НЕ используйте этот тег для других продуктов, принадлежащих Oracle, таких как Java и MySQL.