0

Создание приложения с использованием asp.net и кода, в котором отображается заголовок, сводка и некоторые изображения для каждой записи в базе данных. Я получаю это исключение, когда я пытаюсь отобразить изображения:Отображать данные из двух таблиц (не может быть сконструирован в запросе LINQ to Entities.)

Исключение типа «System.NotSupportedException» произошло в EntityFramework.SqlServer.dll, но не был обработан в пользовательском коде Дополнительная информация: объект или комплекс тип «FileUpload.Context.Support» не может быть сконструирован в запросе LINQ to Entities.

Проблема связана с моим запросом linq DisplaySummary, и мне интересно, как я могу его исправить, чтобы он отображал сводку и связанные с ней изображения.

Благодарим за помощь.

Контроллер: Я попробовал это в контроллере, но он не работает

public ActionResult Display() 
    { 
     var files = db.Supports.Select(d => new Support() 
     { 
      SupportId = d.SupportId, 
      Name = d.Name, 
      Summary = d.Summary, 
      FileDetails = d.FileDetails.Select(x => new FileDetail() 
      { 
       Id = x.Id, 
       FileName = x.FileName, 
       Extension = x.Extension 

      }).ToList() 
     }).ToList(); 
     return View(files); 
    } 

Вид:

@model List<FileUpload.Models.Support> 
@{ 
    ViewBag.Title = "Index"; 
} 

@foreach (var p in Model) 
{ 
    <h3>@p.Name</h3> 
    <p>@p.Summary</p> 
    foreach (var file in p.Files) 
    { 
     <img class="img-thumbnail" width="150" height="150" src="~/Images/@(file.FileName+file.Extension)" /> 
    } 
} 

Модель:

public class Support 
{ 

    public int SupportId { get; set; } 

    [Required(ErrorMessage = "Please Enter Your Name")] 
    [Display(Name = "Name")] 
    [MaxLength(100)] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Please Enter Summary")] 
    [Display(Name = "Summary")] 
    [MaxLength(500)] 
    public string Summary { get; set; } 

    public virtual ICollection<FileDetail> FileDetails { get; set; } 

} 

public class FileDetail 
{ 
    public Guid Id { get; set; } 
    public string FileName { get; set; } 
    public string Extension { get; set; } 
    public int SupportId { get; set; } 
    public virtual Support Support { get; set; } 

} 

Контекст:

public class EfDbcontext : DbContext 
{ 
    public EfDbcontext() 
     : base("name=DefaultConnection") 
    { 
    } 
    public DbSet<Support> Supports { get; set; } 
    public DbSet<FileDetail> FileDetails { get; set; } 
} 

ответ

0

Если вы абсолютно не хотите иметь FileDetail сек без правильного значения SupportId, вы можете просто использовать

var files = db.Supports.Include(s => s.FileDetails).ToList(); 

Entity Framework не позволяет создавать типы сущностей непосредственно в выражении LINQ. Он хочет сделать это сам, возможно, чтобы избежать отслеживания проблем с неполными объектами.

+0

Спасибо, Герт, очень полезный ответ, вы исправили мою проблему – ARandomUserNamedChuck

 Смежные вопросы

  • Нет связанных вопросов^_^