我是 NHibernate 的新手,但对 EF4 有更好的了解。
我有一个基本的“编辑项目”页面,在提交时我想用表单中的值更新我的项目对象。FWIW,我正在使用 FormView 并在可行的情况下利用新的 WebForms 模型绑定功能。
我的“项目”对象有一个属性:
public virtual Category Category { get; set; }
它对应于数据库中的 FK 关系(“CategoryId”列指向“Category”表。)
所以我的表格有一个“类别”下拉菜单。此下拉列表已加载所有类别对象的列表。
提交时,我要做的就是将 Category 下拉列表中的选定值分配给我的 Item 对象的 Category 属性。很直截了当,对吧?:)
但是我遇到了困难:
我可以轻松获得 dropdown.SelectedValue,但我无法将其分配给我的 Item 对象。在 EF4 中,我的 Item 对象将使用外键关联,因此将同时具有
Category
和CategoryId
属性,这些属性将自动保持同步。当我在 NHibernate 中尝试类似的操作时,由于尝试多次使用单个列,我得到了这个 SqlParameterCollection 错误的无效索引。我很容易得到 dropdown.SelectedItem,但这是ListItem类型,不能转换为
Category
.我尝试使用 dropdown.DataSource 属性(可能访问“SelectedIndex-th”项),但是在单步执行代码时,此 DataSource 值为空。
到目前为止,我最好的(可怕的)解决方案如下:
var dropdown = (DropDownList)MyFormView.FindControl("dropdown");
var id = dropdown.SelectedValue;
var category = new MyRepository().GetCategoryById(id);
item.Category = category;
所以我正在做一个额外的存储库调用,并再次获取整个 Category 对象,而我真正想做的是:
item.CategoryId = id;
我应该怎么做?