Я работаю над продуктом ASP.NET MVC, используя EF 4.3 с отложенной загрузкой.
У меня есть класс Product, который может иметь ноль или более вложений:
public class Product
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual long Id { get; set; }
//... other properties
public virtual List<Attachment> Pictures { get; set; }
}
public class Attachment
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual long Id { get; set; }
[Required]
public virtual byte[] Data { get; set; }
}
Моя основная страница (HTML) будет содержать сведения о продукте, включая список вложений.Для последнего мне требуется только идентификатор вложения, и я явно не хочу загружать свойство Data
(которое может содержать много данных).
Как мне написать запрос, который будет возвращать толькоидентификаторы вложения, и не будет запрашивать базу данных для свойства данных вложения?
Запрос ниже не был успешным;ошибка: Невозможно создать постоянное значение типа 'XXX.Model.Attachment'.В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid).
var query = from a in db.Attachments
from prod in db.Product
from pic in prod.Pictures
where prod.Id == prodId && a.Id == pic.Id
select a.Id;
query.ToList();
И следующее загрузило поле данных вложения:
var product = db.Products.Find(prodId);
var pictureIds = product.Pictures.Select(x => x.Id).ToList();