繁体   English   中英

显示来自两个表的数据(无法在LINQ to Entities查询中构造。)

[英]Display data from two tables (cannot be constructed in a LINQ to Entities query.)

首先使用asp.net和代码创建一个应用程序,该应用程序显示数据库中每个条目的标题,摘要和一些图像。 当我尝试显示图像时出现此异常:

EntityFramework.SqlServer.dll中发生类型'System.NotSupportedException'的异常,但未在用户代码中处理。其他信息:实体或复杂类型'FileUpload.C​​ontext.Support'不能在LINQ to Entities查询中构造。

问题出在我的DisplaySummary linq查询上,我想知道如何解决它,以便它显示摘要和相关图像。

谢谢你的帮助。

控制器:我在控制器中尝试过此方法,但是它不起作用

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; }
}

除非您绝对希望FileDetail的值不带SupportId的正确值,否则您可以简单地使用

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

实体框架不允许直接在LINQ表达式中创建实体类型。 它想自己做,可能是避免跟踪不完整实体的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM