我創建了一個MVC 4並使用NHibernate來持久化模型並將其與流暢的nhibernate進行映射。實體有一個「名稱」屬性和映射像這樣:在NHibernate中刪除一個對象時,「非空屬性引用一個空值或瞬態值」
Map(x => x.Name).Not.Nullable().Length(100);
我創建了一個表,觀察對象名單,讓我來編輯,查看對象的詳細信息,並刪除它們。 當我刪除對象時,視圖層通過存儲庫對象將模型Id回發給相應的控制器和控制器,嘗試刪除該對象。
[HttpPost]
public ActionResult DeleteElement(Element element)
{
Element deletedElement = repository.Delete(element);
TempData["message"] = string.Format("{0} has been deleted.",deletedElement.Name);
return RedirectToAction("Index");
}
局部表視圖:
<td>
@using (Html.BeginForm("DeleteMenu", "Admin"))
{
@Html.Hidden("ID", item.ID)
<input type="submit" value="Delete"/>
}
</td>
所以視圖只發布回elemntID到控制器。元素對象只有它的ID。並且它的所有屬性都爲null。當試圖刪除對象是因爲name屬性爲null時,存儲庫中的會話對象無法刪除對象,因爲name字段爲空。
錯誤消息:
非空屬性引用null或瞬時值Element.Name
如果我只是刪除對象,並有主鍵,爲什麼如果其他字段爲空,nHibernate會關心嗎? 以及如何刪除對象只有它的ID?
public IQueryable<T> GetAll()
{
return session.Query<T>();
}
public IQueryable<T> Get(Expression<Func<T, bool>> predicate)
{
return GetAll().Where(predicate);
}
public void Delete(T entity)
{
session.Delete(entity);
}
感謝。你的詳細答案幫了很大忙,問題就解決了。 –