Estoy utilizando el marco de entidades para conectarme con la base de datos. Tengo un pequeño problema:Recuperar un objeto del marco de entidad sin un campo ONE
Tengo una tabla que tiene una columna varbinary (MAX) (con filestream).
Estoy usando una solicitud SQL para administrar la parte "Datos", pero EF para el resto (metadatos del archivo).
Tengo un código que tiene que obtener todos los archivos id, nombre de archivo, guid, fecha de modificación, ... de un archivo. Esto no necesita en absoluto el campo "Datos".
¿Hay alguna forma de recuperar una lista pero sin llenar esta columna?
Algo así como
context.Files.Where(f=>f.xyz).Exclude(f=>f.Data).ToList();
??
Sé que puedo crear objetos anónimos, pero necesito transmitir el resultado a un método, por lo que no hay métodos anónimos. Y no quiero poner esto en una lista de tipo anónimo, y luego crear una lista de mi tipo no anónimo (Archivo).
El objetivo es evitar esto:
using(RsSolutionsEntities context = new RsSolutionsEntities())
{
var file = context.Files
.Where(f => f.Id == idFile)
.Select(f => new {
f.Id, f.MimeType, f.Size, f.FileName, f.DataType,
f.DateModification, f.FileId
}).FirstOrDefault();
return new File() {
DataType = file.DataType, DateModification = file.DateModification,
FileId = file.FileId, FileName = file.FileName, Id = file.Id,
MimeType = file.MimeType, Size = file.Size
};
}
(estoy usando aquí el tipo anónimo porque de lo contrario obtendrá un NotSupportedException: La entidad o tipo complejo 'ProjectName.File' no se puede construir en una . LINQ to Entities)
(por ejemplo, el código emitir la excepción anterior:
File file2 = context.Files.Where(f => f.Id == idFile)
.Select(f => new File() {Id = f.Id, DataType = f.DataType}).FirstOrDefault();
y "archivo" es el tipo de recibo con un context.Files.ToList()
. Esta es la clase buena:
using File = MyProjectNamespace.Common.Data.DataModel.File;
de archivos es una clase conocida de mi DataContext EF:
public ObjectSet<File> Files
{
get { return _files ?? (_files = CreateObjectSet<File>("Files")); }
}
private ObjectSet<File> _files;
¿Puedes quitar esa columna de tu objeto EF? – Gabe
Desearía poder, pero es una columna "NON NULL", y EF no me gusta cuando tengo una columna no nula que no están en el modelo – J4N
La única razón por la cual EF tendría un problema con las columnas no nulas excluidas es durante 'INSERT' a la base de datos. Puede solucionarlo utilizando procedimientos, activadores y otros métodos. Para 'SELECT', usted ** puede ** excluir columnas de la tabla. – Yuck