在MVC视图中显示相关实体的列表

本文关键字:实体 列表 显示 MVC 视图 | 更新日期: 2023-09-27 18:29:23

我有一个表ECmain,它与另外两个表Notes和Email有关系。

我想访问视图中的数据,这样ECmain中的每条记录都会显示一个脚趾列表,并且可以编辑。

这是我的型号

namespace EditSuite.Models
{
public class ECmain
{
    public ECmain()
{
    this.Notes = new Collection<Notes>();
}
    public int ID { get; set; }
    public string Auth { get; set; }
    public string KeyWords { get; set; }
    public string Description { get; set; }
    public string URL { get; set; }
    public string Category { get; set; }
    public string SubCategory { get; set; }
    public string Title { get; set; }
    public string Live { get; set; }
    public virtual ICollection<Notes> Notes { get; set; }
    public virtual ICollection<Email> Email { get; set; }
    public List<Notes> NoteList { get; set; }
}
public class Email
{
    public int ID { get; set; }
    public int ECmainID { get; set; }
    public string EmailText { get; set; }
    public virtual ECmain ECmain { get; set; }
}

public class Notes
{
    public int ID { get; set; }
    public int ECmainID { get; set; }
    public string NotesText { get; set; }
    public virtual ECmain Ecmain { get; set; }
}

数据库上下文

namespace EditSuite.DAL
{
public class ECContext : DbContext
{
    public ECContext()
        : base("name=ECmodelConnection")
    {
    }
    public virtual DbSet<ECmain> ECmain { get; set; }
    public virtual DbSet<Email> Email { get; set; }
    public virtual DbSet<Notes> Notes { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}
}

控制器

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using EditSuite.DAL;
using EditSuite.Models;
namespace EditSuite.Controllers
{
    public class ECmainsController : Controller
    {
        private ECContext db = new ECContext();
        // GET: ECmain
        public ActionResult Index()
        {
            //var church = from m in db.ECmain.Take(10)
            //             where m.Live == "Y" && m.Auth == "Yes"
            //             select m;
            //church = church.OrderBy(m => m.Category);
            return View(db.ECmain.Take(10));
        }

查看

 @foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Notes)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.KeyWords)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Description)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.URL)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Category)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SubCategory)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Live)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}

结果是"/"应用程序中的服务器错误。

列名"ECmain_ID1"无效。列名"ECmain_ID1"无效。列名"ECmain_ID"无效。列名"ECmain_ID1"无效。

描述:在执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误以及错误在代码中的来源的更多信息。

异常详细信息:System.Data.SqlClient.SqlException:列名"ECmain_ID1"无效。列名"ECmain_ID1"无效。列名"ECmain_ID"无效。列名"ECmain_ID1"无效

我试过了@Html.DisplayFor(modelItem=>item.NoteList)但是没有返回任何

在MVC视图中显示相关实体的列表

这听起来很像这个问题:ASP.NET MVC/实体框架错误-列名';无效;Environment_Id';

那里的答案可能对你有帮助。

Gerry

第三方编辑

对我来说,格里给出的答案可能对你的问题有用。我对EF和MVC的工作不多,但基于您的异常System.Data.SqlClient.SqlException: Invalid column name 'ECmain_ID1''ECmain_ID',我假设

  • 实体框架创建的sql语句与数据库中的列不匹配
  • 或者sql结果中的表列与电子邮件对象的属性之间的匹配失败