【发布时间】:2011-06-26 00:38:34
【问题描述】:
我有一个用于字典/同义词库的 Word 模型:
public class Word
{
public virtual string Text { get; set; }
public virtual IList<Word> Synonyms { get; set; }
public virtual IList<Word> Antonyms { get; set; }
}
每个单词都有许多同义词和反义词。 Word 有一个映射:
public class WordMapping : ClassMap<Word>
{
Id(x => x.Text);
HasMany(x => x.Synonyms);
HasMany(x => x.Antonyms);
}
在我的控制器中,我有一个简单的单词查找方法:
public ActionResult Word(string word)
{
using (var session = MvcApplication.SessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var result = session.QueryOver<Word>()
.Where(w => w.Text == word)
.SingleOrDefault();
if(result == null)
RedirectToAction("InvalidWord");
ViewBag.Synonyms = result.Synonyms.Select(t => t.Text);
ViewBag.Antonyms = result.Antonyms.Select(t => t.Text);
return View(result);
}
}
}
当我打印出视图中的 ViewBag 集合时,它们都是相同的。它们是从两个包包中随意选择的元素,而不是整个包包。
更新:下面是我将单词提交到数据库的代码,如果有帮助的话。当我在提交后打印出words 时,所有的同义词都是正确的。
List<Word> words;
...
using (var session = MvcApplication.SessionFactory.OpenSession())
{
// populate the database
using (var transaction = session.BeginTransaction())
{
foreach (var word in words)
session.Save(word);
transaction.Commit();
}
}
PrintWords(words);
【问题讨论】:
标签: c# fluent-nhibernate asp.net-mvc-3 has-many