2

私は MVC 4 を作成し、NHibernate を使用してモデルを永続化し、流暢な nhibernate でマッピングしました。エンティティには「Name」プロパティがあり、次のようにマッピングされます。

 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 しかありません。name プロパティが null であるためオブジェクトを削除しようとすると、名前フィールドが null であるため、リポジトリ内のセッション オブジェクトはオブジェクトを削除できません。

エラーメッセージ:

null 以外のプロパティが null または一時的な値 Element.Name を参照しています

オブジェクトを削除するだけで主キーがある場合、nHibernate が他のフィールドが null であることを気にするのはなぜですか? どうすれば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);
        }
4

1 に答える 1