我是一個仍然discovring NHibernate的,所以也許我的問題是有點笨:(功能NHibernate的hasMany合併
我有以下型號: 問卷-N->答-1->問題
public class Questionnaire : IEquatable<Questionnaire>
{
public virtual int? Id {get;set;}
public virtual IList<Answer> Answers { get; set; }
}
public class QuestionnaireMap : ClassMap<Questionnaire>
{
public QuestionnaireMap()
{
this.Table("Questionnaire");
this.Id(questionnaire => questionnaire.Id).GeneratedBy.Identity();
this.HasMany(questionnaire => questionnaire.Answers).Cascade.AllDeleteOrphan().Inverse().KeyColumn("QuestionnaireId");
}
}
public class Answer : IEquatable<Answer>
{
public virtual int QuestionId { get; set; }
public virtual int? QuestionnaireId { get; set; }
public virtual bool Value { get; set; }
public virtual Questionnaire Questionnaire { get; set; }
}
public class AnswerMap : ClassMap<Answer>
{
public AnswerMap()
{
this.Table("Questionnaire_Answer");
this.CompositeId()
.KeyProperty(answer => answer.QuestionId).Mapped()
.KeyReference(answer => answer.Questionnaire, "QuestionnaireId").Mapped();
this.Map(answer => answer.Value);
}
}
我能得到我的實體和保存的新實體。
不幸的是,某些情況下,「正在更新」這是行不通的。
如果我刪除問卷的所有答案,然後調用session.Merge(答案),那麼一切正常。
但是,如果我一個新的答案添加到調查問卷
questionnaire.Answers.Add(new Answer { BoolValue = true, QuestionId = 3, Questionnaire = questionnaire });
然後我得到一個異常(System.Reflection.TargetException:「非靜態方法需要一個目標」)。
通過使用SQL事件探查我看到NHibernate的嘗試插入一個空的questionnaireId一個新的答案(有當然是一個非空列)。 我認爲我的映射是錯的,但我看不出有什麼問題。
有人可以幫助我嗎?
感謝&的問候!
仍然沒有工作:(你有什麼其他的想法感謝 – bregell
@bregell:我心中已經updatet通過回答希望它可以幫助 – Dariusz
我這樣做修改,但它也。不工作。因此,我反正添加標識列的回答表和刪除組合鍵。然後,一切都很好。感謝您的幫助(這些映射顯然是錯誤的):) – bregell