Это настройки моего приложения:
Веб-клиент <-> Служба WCF <-> Хранилища доменов <-> База данных NHibernate <->
Все проекты используют одни и те же доменные объекты через «общие библиотеки DLL».
Одна из сущностей (Атрибут) получила коллекцию дочерних сущностей (Опция). Отображение выглядит так:
// Attribute mapping
<class name="Attribute" lazy="false" table="Attributes">
<id name="Id" column="AttributeId" type="System.Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="Name" type="System.String" length="100" not-null="true" />
<bag name="Options" generic="true" lazy="false" cascade="all-delete-orphan">
<key column="AttributeId" foreign-key="AttributeId" />
<one-to-many class="AttributeOption" not-found="ignore" />
</bag>
</class>
// Attribute option mapping, which is a child of Attribute
<class name="AttributeOption" lazy="false" table="AttributeOptions">
<id name="Id" column="OptionId" type="System.Int32" unsaved-value="0">
<generator class="native" />
</id>
<property name="AttributeId" type="System.Int32" not-null="true" />
<property name="Name" type="System.String" length="100" not-null="true" insert="true" update="true" />
<property name="Order" column="OrderVal" type="System.Int32" not-null="true" insert="true" update="true" />
</class>
Кажется, все работает нормально, за исключением попыток обновить одно из свойств OPTION.
Чтобы быть более точным; Значение IS обновляется каждый раз, когда я нахожусь в режиме отладки Visual Studio, и вручную нажимаю «Развернуть результат» в IEnumerable, возвращаемом из следующей строки кода:
var attrib = tempAttribute.Options.Where(e => e.Id == parsedId).Select(e => e.Name = model.EditRequest.Name);
Однако, если я не выполню ручное «расширение результата» (как я это сделал на изображении ниже), оно также не обновит базу данных.
занятой кот http://i54.tinypic.com/311ungn.gif
Как это вообще возможно? Это не имеет особого смысла для меня ..
Любая помощь или теории очень ценится! : -)
Большое спасибо!