Estamos intentando que Entity Framework funcione en nuestra tienda con una base de datos existente (y por lo tanto, cambiar el esquema de base de datos NO es una opción) y las pruebas unitarias que creamos para probar cosas muestran un comportamiento realmente extraño.Entity Framework: ¿De dónde diablos es obtener estas columnas?
Este es el SQL que escupe para un objeto específico que tenemos:
SELECT
[Extent1].[CommentTypeId] AS [CommentTypeId],
[Extent1].[DataPartId] AS [DataPartId],
[Extent1].[CommentId] AS [CommentId],
[Extent1].[CreatedTime] AS [CreatedTime],
[Extent1].[Message] AS [Message],
[Extent1].[From] AS [From],
[Extent1].[Likes] AS [Likes],
[Extent1].[SourceTypeId] AS [SourceTypeId],
[Extent1].[StatusMessage_DataPartId] AS [StatusMessage_DataPartId],
[Extent1].[Album_DataPartId] AS [Album_DataPartId]
FROM [dbo].[Comments] AS [Extent1]
Las dos últimas columnas solicitadas, como se puede notar, no son como los demás. ¡Eso se debe a que en realidad no existen, y no tenemos idea de por qué Entity los está solicitando! Ni nuestros archivos de configuración ni nuestros POCO hacen ninguna mención de ellos en absoluto. De hecho, en lo que respecta a nuestra base de datos, son conceptos completamente independientes y no están directamente relacionados.
¿De dónde saca estas columnas, y cómo le digo que las corte?
EDITAR: Para responder a algunas de las preguntas a continuación, 1) Estamos utilizando Entity Framework 4.2. Estamos usando un mapeo fluido.
2) La propia POCO se parece a esto, con el lío igualdad cortar en aras de la brevedad:
public long DataPartId { get; set; }
public string CommentId { get; set; }
public DateTime? CreatedTime { get; set; }
public string Message { get; set; }
public string From { get; set; }
public int? Likes { get; set; }
public string SourceTypeId { get; set; }
public int CommentTypeId { get; set; }
public virtual DataPart DataPart { get; set; }
public virtual CommentType CommentType { get; set; }
3) No estamos utilizando edmx. Tenemos un DbContext personalizado. No hay demasiadas líneas que sean terriblemente interesantes. Estos dos son probablemente de interés:
Configuration.LazyLoadingEnabled = true;
Configuration.ProxyCreationEnabled = true;
Más allá de eso, el archivo de contexto es un montón de
modelBuilder.Configurations.Add(new WhateverConfiguration())
y
public IDbSet<WhateverPoco> PocoDatabaseTableAccessor { get; set; }
4) Empezamos con db-primero, pero eso no funcionó, por lo que actualmente estamos haciendo código primero.
5) Se trata de las entrañas de la configuración para que POCO específica:
HasRequired (x => x.DataPart)
.WithRequiredDependent (x => x.Comment);
HasRequired (x => x.CommentType)
.WithMany (x => x.Comments)
.HasForeignKey (x => x.CommentTypeId);
HasKey (x => x.DataPartId);
ToTable ("Comments", "dbo");
¿Cómo está usando el marco de entidades? ¿Estás usando un mapeo fluido o usando un archivo edmx? ¿Estás utilizando la ingeniería inversa integrada en el diseñador? ¿Qué versión del marco de la entidad? ¿Puedes publicar una captura de pantalla de las partes relevantes de tu modelo de datos? –
Muestra el modelo, las clases POCO o el DbContext personalizado. –
Parece que podrían ser campos de clave externa generados primero por código. – jrummell