Witam!
Mam problem ze zwróceniem przez metodę Listy odczytanej z bazy danych.
Metoda GetCollectionWords odczytuje za pomocą Fluent Nhibernate z bazy danych listę obiektów CollectionWords (każdy taki obiekt posiada również listę obiektów Word) i przypisuje ją do pomocniczej listy collectionToReturn.
public List<CollectionWords> GetCollectionWords()
{
List<CollectionWords> collectionToReturn = new List<CollectionWords>();
using ( var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var users = session.CreateCriteria(typeof(Users)).Add(Restrictions.Eq("Id", User.UserIdNumber)).List<Users>();
collectionToReturn = users[0].CollectionWord.ToList<CollectionWords>();
}
transaction.Commit();
}
}
return collectionToReturn;
}
Kiedy odwołuję się do pól zwróconego przez GetCollectionWords obiektu to wszystko działa. Problem zaczyna się wtedy, gdy próbuję odwołać się do listy Word(List<Word>) która znajduje się w obiektach CollectionWord
private void AddColection_Click(object sender, RoutedEventArgs e)
{
List<CollectionWords> testList = new List<CollectionWords>();
testList = userOperations.GetCollectionWords();
foreach (var colle in testList)
{
textbox1.text = textbox1.text + colle.NameCollection;
foreach (var _word in colle.ListWords) // !!!!!!!!! Tu wywala wyjątek !!!!!!!
{
listOfWordsToRead.Add(new Word { Question = _word.Question, Answer = _word.Answer });
}
}
}
Treść komunikatu:
failed to lazily initialize a collection of role: Test_Fluent_Login.DataBase.Entities.CollectionWords.ListWords, no session or session was closed
Jeśli wykonuje różne operacje na tej odczytanej z bazy kolekcji w metodzię GetCollectionWords to wszystko działa, więc pewnie problem jest w tym że zamyka tą sesję i nie mże się do niej odwołać.
W jaki sposób mogę rozwiązać ten problem?
Próbowałem w taki sposób dodawać obiekty do listy collectionToReturn i wtedy działa, ale nie mogę w tym sposobie zainicjalizować pola Id obiektu a(collectionWords) ponieważ jest tylko do odczytu
foreach (var coll in users[0].CollectionWord)
{
CollectionWords a = new CollectionWords { NameCollection = coll.NameCollection };
foreach(var _word in coll.ListWords)
{
a.ListWords.Add(new Word { Answer = _word.Answer, Question = _word.Question });
}
collectionToReturn.Add(a);
}