У меня есть приложение, использующее Fluent NHibernate на стороне сервера для настройки базы данных. Fluent использует Lazyloading по умолчанию, но я явно отключил это, поскольку это дало мне проблемы при отправке объектов на клиентскую сторону. Очевидно, клиент не может загружать объекты лениво, так как он не имеет доступа к базе данных.Как обеспечить объекты ленивыми загрузками (Fluent) NHibernate?
Теперь я пытаюсь повторно подключить Lazyloading для частей моего datamodel, так как есть некоторые части, где я хочу только вернуть объекты верхнего уровня клиенту. Однако они не кажутся Lazyloaded. Зачем?!
Что я сделал, чтобы отключить LazyLoading, добавлялось Not.LazyLoading()
в объекте сопоставления и по ссылкам в сопоставлении. Теперь удаление этого не похоже на эффект. Отладка Я вижу все объекты, на которые ссылаются, и я также получаю их все на стороне клиента. Тем не менее, NHibernateUtil.IsInitialized(myObjectFromDb.SomeReference)
правильно говорит об ошибке одновременно. Так; как я могу обеспечить, чтобы объекты были ленивыми; получить объект, который не обращается к клиенту? Любые идеи, что я могу ошибаться?
У меня есть несколько классов (очень упрощенный пример ..):
public class Customer
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Order> Orders { get; set; }
}
public class Order
{
public virtual int Id { get; set; }
public virtual IList<Item> Items { get; set; }
}
public class Item
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
Простые отображения - с использованием по умолчанию LazyLoading:
public class CustomerMapping : ClassMap<Customer>
{
public CustomerMapping()
{
Id(c => c.Id);
Map(c => c.Name);
HasMany(c => c.Orders);
}
}
public class OrderMapping : ClassMap<Order>
{
public OrderMapping()
{
Id(c => c.Id);
HasMany(c => c.Items);
}
}
public class ItemMapping : ClassMap<Item>
{
public ItemMapping()
{
Id(c => c.Id);
Map(c => c.Name);
}
}
И я принесу прямо вперед с Session.Load<Customer>(id)
- возвращая результат по моей службе REST непосредственно без доступа к объекту, чтобы загружать ленивые ссылки. Как сразу после загрузки, так и на объекте, возвращаемом на сервер, загружаются ссылки. Как я могу это предотвратить?
Я замечаю, что на самом деле я проверяю объект в отладке, который заставляет объект загружаться. После проверки IsInitialized возвращает true. Итак, я думаю, что это оболочка XML, сделанная WCF, которая заставляет объекты загружаться, но поскольку это выходит за рамки сеанса, я думал, что было поздно лениво загружать их? – stiank81