我是一个仍然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