Dictionary Fluent NHibernate映射自引用词典

Dictionary Fluent NHibernate映射自引用词典,dictionary,fluent-nhibernate,mapping,Dictionary,Fluent Nhibernate,Mapping,我知道有几个相关的问题,我已经研究了其中的许多问题,但解决方案似乎不适用于我的情况 我将NH2.1与Fluent一起使用(是的,这是一个较旧的版本,但它是几个相关项目的共同点,需要一些工作才能升级),我基本上映射了一个FSM;该系统的用户每次会收到一个问题,通常有两个或多个答案供他们选择。他们的答案引出下一个问题,根据给出的答案,这个问题可能会有所不同 这将创建一个类似以下内容的域(稍微清理): 。。。但是,当我尝试基于此导出模式时,我得到一个与未映射实体KeyValuePair关联的错误,这表

我知道有几个相关的问题,我已经研究了其中的许多问题,但解决方案似乎不适用于我的情况

我将NH2.1与Fluent一起使用(是的,这是一个较旧的版本,但它是几个相关项目的共同点,需要一些工作才能升级),我基本上映射了一个FSM;该系统的用户每次会收到一个问题,通常有两个或多个答案供他们选择。他们的答案引出下一个问题,根据给出的答案,这个问题可能会有所不同

这将创建一个类似以下内容的域(稍微清理):

。。。但是,当我尝试基于此导出模式时,我得到一个与未映射实体KeyValuePair关联的错误,这表明我试图在NH中使用错误的集合构造。除了另一个映射实体的basic HasMany()映射之外,我对集合映射没有很好的经验

以下是我所追求的基本模式:

Question
   QuestionId (int, PK, non-nullable)
   TemplateId (int, FK to Template, not nullable, not an issue AFAIK)
   QuestionText (string, not nullable)
   PreviousQuestion (int, FK to Question, nullable, also not an issue AFAIK)

QuestionAnswer (my problem child)
   QuestionId (int, PK, FK to Question, not nullable)
   Answer (string PK, key of Dictionary in domain, not nullable)
   NextQuestionId (int, FK to Question, nullable)

您能否单独定义答案并为其提供映射

差不多

class Answer
{
  public virtual int Id { get; set; }
  public virtual string AnswerText { get; set; }
  public virtual Question NextQuestion { get; set; }
}
现在问题变成了

class Question
{
    public virtual int Id { get; set; }
    public virtual QuestionnaireTemplate Template { get; set; }
    public virtual string QuestionText { get; set; }
    public virtual Question PreviousQuestion { get; set; }
    private List<Answer> answers
    //Map this
    public virtual IList<Answer> AnswerList { get return answers; }
    public virtual IDictionary<string, Answer> Answers {get return answers.ToDictionary(a => a.AnswerText)}
}
课堂提问
{
公共虚拟整数Id{get;set;}
公共虚拟问题重新模板模板{get;set;}
公共虚拟字符串QuestionText{get;set;}
公共虚拟问题PreviousQuestion{get;set;}
私人名单答案
//映射这个
公共虚拟IList应答列表{获取返回应答;}
公共虚拟IDictionary Answers{get return Answers.ToDictionary(a=>a.AnswerText)}
}

我只是认为这简化了映射。

这是可行的,如果不理想的话。如果其他人没有想出一个方法来映射这一点,你会得到检查;目前为+1。
class Answer
{
  public virtual int Id { get; set; }
  public virtual string AnswerText { get; set; }
  public virtual Question NextQuestion { get; set; }
}
class Question
{
    public virtual int Id { get; set; }
    public virtual QuestionnaireTemplate Template { get; set; }
    public virtual string QuestionText { get; set; }
    public virtual Question PreviousQuestion { get; set; }
    private List<Answer> answers
    //Map this
    public virtual IList<Answer> AnswerList { get return answers; }
    public virtual IDictionary<string, Answer> Answers {get return answers.ToDictionary(a => a.AnswerText)}
}