Я использую NHibernate 3.1.0.4000 и AutoMapper 2.0.0.0 в WCF.У меня есть отношения родитель-ребенок, которых я хочу поддерживать со стороны «многих».У меня нет проблем с поддержанием объектов, если я делаю это с одного конца, но в этом случае это не имеет смысла.Моя проблема не в том, как я изменяю свои отображения, POCO и т. Д. Родительский объект, когда я пытаюсь добавить дочерний элемент, является нулевым в дочернем элементе, что приводит к сбою вставки.Чего мне не хватает, чтобы получить родительское свойство в дочернем объекте для заполнения?У меня есть отношения родитель-потомок, определенные в следующих таблицах:
Create Table Attribute (AttributeUID uniqueidentifier, LongName varchar(20))
Create Table AnswerOption (AnswerOptionID int, AttributeUID uniqueidentifier)
Я хочу, чтобы Атрибут (родительский) был владельцем, поэтому я объявляю отношения в этом файле сопоставления, а не в AnswerOption (дочерний),Тем не менее, я пробовал также иметь двусторонние отношения, и это не изменило поведение в моих тестах.Мои отображения выглядят следующим образом.Атрибут:
<class name="RCAttribute" table="rcs.tblAttribute">
<cache usage="read-write"/>
<id name="ID">
<column name="AttributeUID" />
<generator class="guid" />
</id>
<property name="LongName" type="string" not-null="true" length="200" column="LongName" />
<bag name="AnswerOptions" lazy="true" inverse="true" cascade="all">
<key column="AttributeUID"/>
<one-to-many class="AnswerOption" />
</bag>
</class>
AnswerOption:
<class name="AnswerOption" table="rcs.tblAnswerOption" lazy="true">
<cache usage="read-write"/>
<id name="ID">
<column name="AnswerOptionID" />
<generator class="native" />
</id>
</class>
Класс атрибута:
[Serializable]
public class RCAttribute
{
public virtual Guid ID { get; set; }
public virtual string LongName { get; set; }
public virtual ICollection<AnswerOption> AnswerOptions { get; set; }
public RCAttribute() { ID = new Guid("00000000-0000-0000-0000-000000000000"); }
}
Класс AnswerOption:
[Serializable]
public class AnswerOption
{
public virtual int ID { get; set; }
public AnswerOption() { ID = 0; }
}
Моя тестовая процедура выглядиткак это;
public void CreateAnswerOption()
{
AnswerOption newOpt = new AnswerOption();
Attribute.AnswerOptions.Add(newOpt);
Attribute = rc.RCAttributeSave(Attribute);
}
Когда дело доходит до создания этого свойства, свойство Attribute объекта answerOption имеет значение null, поэтому его нельзя вставить, поскольку в этом случае родительский элемент не может быть нулевым в дочернем элементе.Чего мне не хватает, чтобы заставить его заполнить родительское свойство для ребенка и иметь возможность вставить?