У меня есть модель 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);