Я отложил этот вопрос в течение некоторого времени, но теперь он беспокоит меня все время.У меня есть 2 класса (Эти классы автоматизированы - я опускаю public
и virtual
для краткости.):
class Cashier
{
int Id {get; set;}
string name{get; set;}
IList<Site> Sites {get; set;}
}
class Site
{
int Id{get; set;}
string name {get; set;}
Cashier Cashier {get; set;}
}
Я загружаю кассиров с этим:
sealed class Repository<T> : IRepository<T> where T :class
{
public IList<T> Items { get; private set; }
public void Load()
{
Items.Clear();
var session = SessionHelper.GetSession();
session.Clear();
using (var tx = session.BeginTransaction())
{
var list = session.Query<T>().ToList();
foreach (var obj in list)
{
Items.Add((T)session.Merge(obj));
}
session.Clear();
tx.Commit();
}
}
//more
}
ив форме win я привязываю его к источнику привязки следующим образом:
cashierBindingSource.DataSource = Cashiers;
Я устанавливаю этот источник привязки в качестве источника данных в поле со списком, и когда я запускаю приложение и нажимаю на поле со списком, это исключение выдается мне:
Инициализация [HRProject.Model.Cashier # 1] - не удалось лениво инициализировать коллекцию ролей: HRProject.Model.Cashier.Sites, ни один сеанс или сеанс не был закрыт
Я обнаружил, что предоставление переопределения сопоставления устраняет эту проблему
mapping.HasMany(x => x.Sites).Not.LazyLoad().Cascade.All();
Однако у меня много таких классов, и у меня возникает ощущение, что есть более чистый способ сделать это.Есть идеи?