[英]Display data from two tables (cannot be constructed in a LINQ to Entities query.)
首先使用asp.net和代码创建一个应用程序,该应用程序显示数据库中每个条目的标题,摘要和一些图像。 当我尝试显示图像时出现此异常:
EntityFramework.SqlServer.dll中发生类型'System.NotSupportedException'的异常,但未在用户代码中处理。其他信息:实体或复杂类型'FileUpload.Context.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.