MVC模型未被数据库填充

时间:2015-07-28 21:36:19

标签: asp.net-mvc linq postgresql nhibernate model

我有一个映射到postgres数据库中的employee表的模型。我使用Nhibernate作为我的ORM而不是实体框架。

当我尝试在视图中显示模型的数据时,它显示模型为空,即使表中有记录并且应该填充模型。

这是我的模特:

    public class Employee
    {

        [Key] public virtual int EmplID { get; set; }
        public virtual string EmpLastName { get; set; }
        public virtual string EmpFirstName { get; set; }
    }

这是我的表映射:

public class EmpMap : ClassMapping<Employee>
{
    public EmpMap()
    {
        Table("tableName");
        Id(x => x.EmplID, x => x.Column("emp_id"));
        Property(x => x.EmpLastName, x => x.Column("emp_last"));
        Property(x => x.EmpFirstName, x => x.Column("emp_first"));
    }
}

这是我的控制器,我尝试填充模型:

  // GET: Employee
    public ActionResult Index()
    { 
        var emp = Database.Session.Query<Employee>().AsEnumerable();
        return View ("Index", emp);
    }

这是我的观点,我尝试显示模型中的数据:

@model IEnumerable<App_Catalog.Models.Employee>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.EmpLastName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.EmpFirstName)
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.EmpLastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.EmpFirstName)
        </td>
        <td>

2 个答案:

答案 0 :(得分:1)

启用NHibernate DEBUG日志记录并验证数据库中是否正在执行正确的SQL查询。

仔细检查您的程序是否真正连接到正确的数据库。

权限,模式名称,表名,列名等问题应该导致异常被抛出,所以除非你在某个地方&#34;处理&#34;通过将它们扫到地毯下来的错误,这些错误应该清楚地显示出来。

检查您的映射类是否真正适用于正确的实体类(如果您有多个类似类的副本),并检查您的映射配置是否真正加载到会话工厂中。 (如果不是,则表示您正在查询未映射的类,是一个错误,但实际上会返回一个空列表)。如果是这种情况,您不应该在NHibernate DEBUG日志中看到此查询中的任何SQL。

我不确定AsEnumerable()是如何实现的,如果以前我还没有使用过。将其替换为ToList()以排除任何可能的干扰。

答案 1 :(得分:0)

是您的表名 - tableName

似乎也在这里:

<tr>
    <th>
        @Html.DisplayNameFor(model => model.EmpLastName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.EmpFirstName)
    </th>
</tr>

您尝试在模型上调用属性,而模型为IEnumerable<App_Catalog.Models.Employee>

并且</tr> }循环结束时缺少“foreach”。这是你复制代码的方式,还是一个真正的错字?

也......(抱歉这么多次修改)..你应该在你的循环中使用model而不是Model