我有以下类(继承(:
public class Animal
{
public Guid Id { get; set; }
}
public class Dog : Animal
{
public string Name { get; set; }
}
public class Cat : Animal
{
public string Name { get; set; }
}
我知道属性name
应该在Animal
中。这只是这个例子
现在,当我选择所有实体时:
_context.Animals.ToListAsync();
我得到以下SQL:
SELECT
"m0"."ID",
"m0"."NAME",
"m1"."NAME",
CASE
WHEN "m1"."ID" IS NOT NULL THEN N'Dog'
WHEN "m0"."ID" IS NOT NULL THEN N'Cat'
END "Discriminator"
FROM ANIMAL
LEFT JOIN DOG "m0" ON "m0".ID = ANIMAL.ID
LEFT JOIN CAT "m1" ON "m1".ID = ANIMAL.ID
生成的SQL导致Oracle异常
ORA-00918:列定义不明确的
(因为name
列(。
对此有什么变通方法或解决方案吗?
使用Oracle.EntityFrameworkCore@6.21.61
我刚刚用EF Core 6进行了测试,EF能够处理这个问题:
上下文:
public class MyContext : DbContext
{
public DbSet<Animal> Animals { get; set; } = default!;
public DbSet<Dog> Dogs { get; set; } = default!;
public DbSet<Cat> Cats { get; set; } = default!;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseOracle("my random connextion string");
}
}
public abstract class Animal
{
public Guid Id { get; set; }
}
public class Dog : Animal
{
public string Name { get; set; } = default!;
}
public class Cat : Animal
{
public string Name { get; set; } = default!;
}
查询:
var a = db.Animals.ToQueryString();
结果:
SELECT a.Id, a.Discriminator, a.Name, a.Dog_Name FROM Animals a