使用NHibernate / FluentHibernates以table作为参数保存

时间:2009-02-19 14:03:52

标签: c# nhibernate fluent-nhibernate

我有一个Answer的集合(IList<Answer>)和两个表(Answer和AnswerHist)。 我想按照以下方式做点什么:

Get the current answers from db.

save(Answers, "AnswerHist");
delete(Answers, "Answer");

Answers = questions
                            .Select(x => new Answer(response)
                            {
                                QuestionID = x.QuestionID,
                                Value = x.Answer.Value,
                                Bool = x.Answer.Bool,
                                Date = x.Answer.Date,
                                Number = x.Answer.Number,
                                Text = x.Answer.Text
                            })
                            .ToList<Answer>();

保存(答案,“答案”);

基本上,将答案保存到历史记录表中,从答案表中删除答案,然后更新答案并将其插入答案表。

任何简单的方法使hibernate保存相同的类与多个相同的表?

1 个答案:

答案 0 :(得分:1)

据我所知,类和表之间的映射是静态的,无法更改。 您可以创建一个AnswerHistory类并将其映射到AnswerHist表:

public class AnswerHistory : Answer {
    public AnswerHistory (Answer answer) {
        this.QuestionID = answer.QuestionID;
        this.Value = answer.Value;
        // ...
    }
}

然后你会像这样使用它:

save(Answers.Select(answer => new AnswerHistory(answer)));
delete(Answers);

Answers = new stuff;
save(Answers);

另一种选择是在答案中添加一个布尔值,无论它是否在历史中;那么你只需要设置那个布尔值并保存(到同一个表)。