powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate 3.1 Fetch FetchMany
5 сообщений из 5, страница 1 из 1
NHibernate 3.1 Fetch FetchMany
    #37626608
GFX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Хочется чтобы NHibernate 3.1 одним sql-запросом сформировал бизнес-объект

имеем вот такой бизнес-объект:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Product : BaseEntity
    {
        public Product()
        {
            Categories = new List<Category>();
            Units = new List<Unit>();
        }
        
        public virtual string Name { get; set; }
        public virtual IList<Category> Categories { get; set; }
        public virtual IList<Unit> Units { get; set; }
        public virtual Tax Tax { get; set; }
        public override string ToString() { return Name; }
    }


вот такой маппинг:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class ProductMap : ClassMap<Product>
    {
        public ProductMap()
        {
            Id(c => c.id);
            Map(c => c.Name).Column("Name").Not.Nullable();
            References(l => l.Tax)
            .Column("idTax")
            .Not.Nullable();

            ////многие ко многим, связь через таблицу
            HasManyToMany(i => i.Categories)
                .Cascade
                .All()
                .Inverse()
                .ParentKeyColumn("idProduct")
                .ChildKeyColumn("idCategory")
                .Table("ProductCategories");

            HasManyToMany(i => i.Units)
                .Cascade
                .All()
                .Inverse()
                .ParentKeyColumn("idProduct")
                .ChildKeyColumn("idUnit")
                .Table("ProductUnits");

            Table("Product");
        }
    }



ну и собственно вот такой linq-запрос:
Код: c#
1.
2.
3.
4.
5.
var obj = session.Query<Product>()
                    .Fetch(t => t.Tax)
                    .FetchMany(u => u.Units)
                    .FetchMany(c => c.Categories).ThenFetch(p => p.Parent)
                    .Where(x => x.id == 1).SingleOrDefault();



теперь если посмортеть в профайлер, то действительно выполняется один запрос(большой очень).
но в таком случае в коллекциях Units и Categories имеем задублированные записи. Хотя в БД нет задублированных записей
для этих коллекций.

Как правильно загружать объекты одним запросом, используя linq, без select N+1?

З.Ы. EF 4.1 умеет это делать, используя Include, и айтемы в коллекциях не дублируются, и sql- запрос один.
...
Рейтинг: 0 / 0
NHibernate 3.1 Fetch FetchMany
    #37627134
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GFX,

А LINQ - принципиально? А то может для IQuery, ICriteria и QueryOver есть простой способ через SetResultTransformer.
...
Рейтинг: 0 / 0
NHibernate 3.1 Fetch FetchMany
    #37627539
GFX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorGFX,

А LINQ - принципиально? А то может для IQuery, ICriteria и QueryOver есть простой способ через SetResultTransformer.

В том то и дело, что Linq принципиально :(
SetResultTransformer - делает то что нужно! Но нужен все таки Linq, потому что используется в Where -Expression.
...
Рейтинг: 0 / 0
NHibernate 3.1 Fetch FetchMany
    #37628455
GFX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, а разработчики NHibernate Linq, собираются это исправлять?
Весь stackoverflow кишит сообщениями типа cartesian product, все хотят полноценный linq.
А так же все пишут что NHibernate поддерживает Linq, приводя детские примеры. а ля
(var list = session.Query<Product>().Where(x => x.Name.StartsWith("P")).ToList();)
Но это же не полноценная поддержка! Я просто возмущен.

Ни кто не знает?
Где можно почитать о том что разработчики намерены исправить какие-нить баги хибера,
желательно баги связанные с linq?

Спасибо!
...
Рейтинг: 0 / 0
NHibernate 3.1 Fetch FetchMany
    #37628893
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GFXГде можно почитать о том что разработчики намерены исправить какие-нить баги хибера,
желательно баги связанные с linq?
Если так хочется... то есть багтрекер NHiberanate , и есть группа посвящённая разработке NHibernate .
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate 3.1 Fetch FetchMany
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]