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

C# 在MVC视图中显示相关实体的列表,c#,asp.net-mvc,entity-framework-4.1,entity-framework,C#,Asp.net Mvc,Entity Framework 4.1,Entity Framework,我有一个表ECmain,它与其他两个表、备注和电子邮件有关系 我想访问视图中的数据,以便在ECmain中为每个记录显示一个脚趾列表,并且可以编辑 这是我的模型 namespace EditSuite.Models { public class ECmain { public ECmain() { this.Notes = new Collection<Notes>(); } public int ID { get; set; } public s

我有一个表ECmain,它与其他两个表、备注和电子邮件有关系

我想访问视图中的数据,以便在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; }
}
看法

@foreach(模型中的变量项){
@DisplayFor(modelItem=>item.Notes)
@DisplayFor(modelItem=>item.KeyWords)
@DisplayFor(modelItem=>item.Description)
@DisplayFor(modelItem=>item.URL)
@DisplayFor(modelItem=>item.Category)
@DisplayFor(modelItem=>item.SubCategory)
@DisplayFor(modeleItem=>item.Title)
@DisplayFor(modelItem=>item.Live)
@ActionLink(“编辑”,“编辑”,新的{id=item.id})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.id})|
@ActionLink(“删除”,“删除”,新的{id=item.id})
}
结果是 “/”应用程序中出现服务器错误

列名“ECmain_ID1”无效。 列名“ECmain_ID1”无效。 列名“ECmain\u ID”无效。 列名“ECmain_ID1”无效

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

异常详细信息:System.Data.SqlClient.SqlException:列名“ECmain_ID1”无效。 列名“ECmain_ID1”无效。 列名“ECmain\u ID”无效。 列名“ECmain_ID1”无效

我试过了 @DisplayFor(modelItem=>item.NoteList)
但这没有返回任何结果这听起来很像这个问题:

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

格里

第三方编辑 对我来说,Gerry给出的答案可能对你的问题有用。我没有在EF和MVC方面做过很多工作,但基于您的异常
System.Data.SqlClient.SqlException:我假设列名“ECmain\u ID 1”或
无效“ECmain\u ID”

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

请检查这些表中的列名
ECmain、Email和Notes
是否有人有姓名为
ECmain\u ID 1
ECmain\u ID
的姓名。您可以添加EF生成的sql语句吗?没有同名字段,有3个一对多的相关表、ECmain、Email和Notes。ECmainID是电子邮件和注释中的一个字段,键入ECmain中的ID。显示屏返回ECmain中的行,但我想添加一列,在数据库规范化时显示该记录的注释和电子邮件列表。也许在本专栏中有另一个foreach循环@Html.DisplayFor(modeleItem=>item.Notes)我在这篇文章中将模型更改为
public-class-Email{public-int-ID{get;set;}public-int-ECmainID{get;set;}public-string-EmailText{get;set;}[ForeignKey(“ECmainID”)]public-virtual-ECmain{get;set;}公共类注释{public int ID{get;set;}public int ECmainID{get;set;}公共字符串NotesText{get;set;}[ForeignKey(“ECmainID”)]公共虚拟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>
}