Нов съм в NHibernate, но разбирам по-добре EF4.
Имам основна страница „Редактиране на елемент“ и при изпращане искам да актуализирам обекта си за артикул със стойности от формуляра. FWIW, използвам FormView и използвам новите функции за обвързване на модели на WebForms, където е практично.
Моят обект "Item" има свойство:
public virtual Category Category { get; set; }
което съответства на FK връзка в базата данни (колона „CategoryId“, сочеща към таблица „Категория“.)
Така че моята форма има падащо меню „Категория“. Това падащо меню е заредено със списък на всички обекти на категорията.
При изпращане всичко, което искам да направя, е да присвоя избраната стойност в падащото меню Category на свойството Category на моя обект Item. Доста право напред, нали? :)
Въпреки това срещнах затруднения:
Мога лесно да получа падащото меню.SelectedValue, но не мога да присвоя това на моя обект Item. В EF4 моят обект Item ще използва Асоциация на чужд ключ и следователно ще има както свойства
Category
, така иCategoryId
, които автоматично ще се поддържат в синхрон. Когато опитах нещо подобно в NHibernate, получих Невалиден индекс за тази 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;
Така че правя допълнително извикване на хранилище и получавам отново целия обект Category, когато всичко, което наистина искам да направя, е:
item.CategoryId = id;
Как трябва да правя това?