【发布时间】:2012-11-09 02:14:33
【问题描述】:
我是 NHibernate 的新手,但对 EF4 有更好的了解。
我有一个基本的“编辑项目”页面,在提交时我想用表单中的值更新我的项目对象。 FWIW,我正在使用 FormView 并在可行的情况下利用新的 WebForms 模型绑定功能。
我的“项目”对象有一个属性:
public virtual Category Category { get; set; }
对应于数据库中的一个外键关系(“CategoryId”列指向“Category”表。)
所以我的表单有一个“类别”下拉菜单。此下拉列表已加载所有类别对象的列表。
提交时,我要做的就是将 Category 下拉列表中的选定值分配给我的 Item 对象的 Category 属性。很直截了当,对吧? :)
但是我遇到了困难:
我可以轻松获得 dropdown.SelectedValue,但我无法将它分配给我的 Item 对象。在 EF4 中,我的 Item 对象将使用 Foreign Key Association,因此将同时具有
Category和CategoryId属性,它们将自动保持同步。当我在 NHibernate 中尝试类似的操作时,由于尝试多次使用单个列而出现 Invalid Index for this SqlParameterCollection 错误。我很容易得到 dropdown.SelectedItem,但这是 ListItem 类型,不能转换为
Category。我尝试使用 dropdown.DataSource 属性(可能访问“SelectedIndex-th”项),但在单步执行代码时,此 DataSource 值为 null。
到目前为止,我最好的(糟糕的)解决方案如下:
var dropdown = (DropDownList)MyFormView.FindControl("dropdown");
var id = dropdown.SelectedValue;
var category = new MyRepository().GetCategoryById(id);
item.Category = category;
所以我要进行额外的存储库调用,并再次获取整个 Category 对象,而我真正想做的只是:
item.CategoryId = id;
我应该怎么做?
【问题讨论】:
标签: asp.net nhibernate webforms asp.net-4.5