Я новичок в NHibernate, но лучше понимаю EF4.
У меня есть базовая страница «Редактировать элемент», и при отправке я хочу обновить свой объект «Элемент» со значениями из формы. FWIW, я использую FormView и использую новые функции привязки модели WebForms, где это практически возможно.
Мой объект "Item" имеет свойство:
public virtual Category Category { get; set; }
что соответствует отношению FK в базе данных (столбец «CategoryId», указывающий на таблицу «Category».)
Итак, в моей форме есть раскрывающийся список «Категория». Этот раскрывающийся список был загружен со списком всех объектов категории.
При отправке все, что я хочу сделать, это присвоить выбранное значение в раскрывающемся списке «Категория» свойству «Категория» моего объекта «Элемент». Довольно прямолинейно, верно? :)
Однако я столкнулся с трудностью:
Я могу легко получить раскрывающийся список.SelectedValue, но я не могу назначить его своему объекту Item. В EF4 мой объект Item будет использовать Foreign Key Association и, следовательно, иметь свойства
Category
иCategoryId
, которые будут автоматически синхронизироваться. Когда я попробовал что-то подобное в NHibernate, я получил Invalid Index for this SqlParameterCollection из-за попытки многократного использования одного столбца.Я легко получаю раскрывающийся список.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;
Итак, я делаю дополнительный вызов репозитория и снова получаю весь объект категории, когда все, что я действительно хочу сделать, это:
item.CategoryId = id;
Как я должен это делать?