Я использую структуру сущности для подключения к базе данных. У меня есть одна небольшая проблема:
У меня есть одна таблица с одним столбцом varbinary (MAX) (с файловым потоком).
Я использую SQL-запрос для управления частью данных, но EF для остальных (метаданные файла).
У меня есть один код, который должен получить все файлы id, filename, guid, date date,... файла. Это вообще не нужно в поле "Данные".
Есть ли способ получить список, но без заполнения этого столбца?
Что-то вроде
context.Files.Where(f=>f.xyz).Exclude(f=>f.Data).ToList();
??
Я знаю, что могу создавать анонимные объекты, но мне нужно передать результат методу, поэтому никаких анонимных методов. И я не хочу помещать это в список анонимного типа, а затем создаю список моего неанонимного типа (Файл).
Цель состоит в том, чтобы избежать этого:
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
};
}
(Я использую здесь анонимный тип, потому что иначе вы получите исключение NotSupportedException: объект или сложный тип "ProjectName.File" не может быть сконструирован в запросе LINQ to Entities.)
(например, этот код выдает предыдущее исключение:
File file2 = context.Files.Where(f => f.Id == idFile)
.Select(f => new File() {Id = f.Id, DataType = f.DataType}).FirstOrDefault();
и "Файл" - это тип, который я получаю с помощью context.Files.ToList()
. Это хороший класс:
using File = MyProjectNamespace.Common.Data.DataModel.File;
Файл - это известный класс моего документа EF datacontext:
public ObjectSet<File> Files
{
get { return _files ?? (_files = CreateObjectSet<File>("Files")); }
}
private ObjectSet<File> _files;