Sto lavorando con Entity Framework Core, v6.2. Sto ricevendo un errore
SqlException: nome oggetto non valido 'Cdef.CellDefinition'
quando provo ad accedere direttamente a DbSet
, ma usando lo stesso oggetto DbContext
, posso interrogare l'oggetto direttamente usando il comando FromSql
.
Ho visto altre risposte che dicono di modificare le convenzioni per rimuovere PluralizingTableNameConvention
, tuttavia dal momento che sto facendo un EntityFrameworkCore.DbContext
che ModelBuilder
non ha questa opzione, e non vedo alcuna prova si tenta di accedere a un nome pluralizzato.
La mia entità è impostata come:
[Table("Cdef.CellDefinition")]
public partial class CellDefinition
{
[Key]
public int Id { get; set; }
}
E il mio DbContext
è come:
public class CDefContext : Microsoft.EntityFrameworkCore.DbContext
{
public virtual Microsoft.EntityFrameworkCore.DbSet<CellDefinition> CellDefinition { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
Quando provo ad accedere direttamente all'oggetto come entità, ottengo un errore:
Nome oggetto non valido
ma se rilascio l'SQL con lo stesso nome oggetto funziona correttamente.
// This fails with Invalid Object Name
return cDefContext.CellDefinition.ToList();
// This succeeds
return cDefContext.CellDefinition.FromSql("select * from CDef.CellDefinition").ToList()
Ho trovato la soluzione. Non è possibile inserire lo schema nel nome della tabella.
//This Does NOT work
[Table("Cdef.CellDefinition")]
public partial class CellDefinition{}
//But this DOES work
[Table("CellDefinition",Schema = "Cdef")]
public partial class CellDefinition{}