Tengo una tabla en mi base de datos llamada SEntries (ver abajo la instrucción CREATE TABLE). Tiene una clave principal, un par de claves externas y nada especial al respecto. Tengo muchas tablas en mi base de datos similares a esa, pero por alguna razón, esta tabla terminó con una columna "Discriminador" en la clase EF Proxy.Código EF Primero "Nombre de columna inválido 'Discriminador'" pero no herencia
Esto es cómo se declara la clase en C#:
public class SEntry
{
public long SEntryId { get; set; }
public long OriginatorId { get; set; }
public DateTime DatePosted { get; set; }
public string Message { get; set; }
public byte DataEntrySource { get; set; }
public string SourceLink { get; set; }
public int SourceAppId { get; set; }
public int? LocationId { get; set; }
public long? ActivityId { get; set; }
public short OriginatorObjectTypeId { get; set; }
}
public class EMData : DbContext
{
public DbSet<SEntry> SEntries { get; set; }
...
}
Cuando intento agregar una nueva fila a la tabla, me sale el error:
System.Data.SqlClient.SqlException: Invalid column name 'Discriminator'.
Este problema sólo se produce si estás heredando tu clase C# de otra clase, pero SEntry no está heredando nada (como puedes ver más arriba).
Además de eso, una vez que consiga la herramienta de punta en el depurador cuando puntero del ratón sobre la instancia EMData para la propiedad centinelas, se muestra:
base {System.Data.Entity.Infrastructure.DbQuery<EM.SEntry>} = {SELECT
[Extent1].[Discriminator] AS [Discriminator],
[Extent1].[SEntryId] AS [SEntryId],
[Extent1].[OriginatorId] AS [OriginatorId],
[Extent1].[DatePosted] AS [DatePosted],
[Extent1].[Message] AS [Message],
[Extent1].[DataEntrySource] AS [DataE...
Cualquier sugerencia o ideas donde para llegar a la fondo de este problema? Traté de cambiar el nombre de la tabla, la clave principal y algunas otras cosas, pero nada funciona.
SQL-Tabla:
CREATE TABLE [dbo].[SEntries](
[SEntryId] [bigint] IDENTITY(1125899906842624,1) NOT NULL,
[OriginatorId] [bigint] NOT NULL,
[DatePosted] [datetime] NOT NULL,
[Message] [nvarchar](500) NOT NULL,
[DataEntrySource] [tinyint] NOT NULL,
[SourceLink] [nvarchar](100) NULL,
[SourceAppId] [int] NOT NULL,
[LocationId] [int] NULL,
[ActivityId] [bigint] NULL,
[OriginatorObjectTypeId] [smallint] NOT NULL,
CONSTRAINT [PK_SEntries] PRIMARY KEY CLUSTERED
(
[SEntryId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[SEntries] WITH CHECK ADD CONSTRAINT [FK_SEntries_ObjectTypes] FOREIGN KEY([OriginatorObjectTypeId])
REFERENCES [dbo].[ObjectTypes] ([ObjectTypeId])
GO
ALTER TABLE [dbo].[SEntries] CHECK CONSTRAINT [FK_SEntries_ObjectTypes]
GO
ALTER TABLE [dbo].[SEntries] WITH CHECK ADD CONSTRAINT [FK_SEntries_SourceApps] FOREIGN KEY([SourceAppId])
REFERENCES [dbo].[SourceApps] ([SourceAppId])
GO
ALTER TABLE [dbo].[SEntries] CHECK CONSTRAINT [FK_SEntries_SourceApps]
GO
Para la próxima persona que pasará algún tiempo tratando de resolver esto, lo que sucedió es que en otro lugar en el código, tuve una clase que heredó de SEntry, a pesar de que no es una clase que alguna vez sería almacenado en la base de datos. ¡Entonces todo lo que tenía que hacer era agregar [NotMapped] como un atributo de esa clase! –