我有一个映射到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>
答案 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