0
我在WCF中使用NHibernate 3.1.0.4000和AutoMapper 2.0.0.0。我有一個我想從「多」端保持的親子關係。如果我從「一個」端做到這一點,那麼維護這些對象就沒有問題,但在這種情況下,這是毫無意義的。我的問題是,無論我如何更改我的映射,POCO等父對象,當我嘗試添加一個孩子爲null導致插入失敗的子。我錯過了什麼讓父項屬性在子中填充? 我在下面的表中定義的父子關係:nhibernate多對一父母插入時始終爲空
Create Table Attribute (AttributeUID uniqueidentifier, LongName varchar(20))
Create Table AnswerOption (AnswerOptionID int, AttributeUID uniqueidentifier)
我想要的屬性(父)是主人,所以我聲明在映射文件的關係,而不是在AnswerOption(孩子)。儘管如此,我也嘗試了雙向關係,並且沒有改變我測試中的任何行爲。我的映射apear如下。屬性:
<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);
}
當它關係到創建這個AnswerOption的屬性屬性爲空,因此它不能插入,因爲父母不能在這種情況下,孩子空。我錯過了什麼讓它填充孩子的父物業,並能夠插入?
奶頭,我不能多謝你!我選擇了選項2,它像一個魅力。我無法首先設置父引用,因爲我不想將該子項的屬性公開給WCF使用者。但是......按照你在#2中建議的方式做到這一點非常簡單直接,並且工作正常。如果只有我一週前發佈了這個問題! :) –