Re[4]: Data Access Layer (EF/Linq2Sql and others)
От: Ziaw Россия  
Дата: 25.03.09 12:36
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Да, абсолютно согласен, ещё я хочу отмести тех кто не позволяет гибко управлять генерацией C#/SQL. И тех у кого нет будущего. Тоесть Linq2Sql/EF тоже похоже уходят. По крайней мере Linq2Sql на 90% отметается


Вобщем-то NHibernate получается довольно неплох, кроме того, что кеш первого уровня у него отключить проблематично (хотя я не могу придумать зачем, кроме экономии памяти). Поддержку связей, коллекций и т.п. можно просто не использовать. Есть linq провайдер, правда не полный, некоторые запросы создать на нем в принципе невозможно. Впрочем для сложных запросов я бы использовал чистый сиквел или hql. Язык запросов почти идентичен сиквелу и почти идентичный сиквел и генерирует. Т.е. сюрпризов со странными запросами к базе без связей, коллекций и lazy load'а не будет.

Осталось руками сделать тестовое приложение и выбрать генератор который нагенерит по базе то, что получилось.
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
Re[5]: Data Access Layer (EF/Linq2Sql and others)
От: Tom Россия http://www.RSDN.ru
Дата: 25.03.09 13:16
Оценка:
Z>Вобщем-то NHibernate получается довольно неплох, кроме того, что кеш первого уровня у него отключить проблематично (хотя я не могу придумать зачем, кроме экономии памяти).
А нафик он нам нужен. Что у насм будет — это свой кэш на основе SqlDependency. При этом естественно что SqlDependency будет создаваться на список обьектов, а не на каждый обьект своя.

Z>Поддержку связей, коллекций и т.п. можно просто не использовать. Есть linq провайдер, правда не полный, некоторые запросы создать на нем в принципе невозможно. Впрочем для сложных запросов я бы использовал чистый сиквел или hql. Язык запросов почти идентичен сиквелу и почти идентичный сиквел и генерирует. Т.е. сюрпризов со странными запросами к базе без связей, коллекций и lazy load'а не будет.


Z>Осталось руками сделать тестовое приложение и выбрать генератор который нагенерит по базе то, что получилось.

осталось хотя бы прочитать доки вводные по всем тулам, сделать матрицу по оценке их и провести эту самую оценку. Уфффф ((((
нехватает таких статей обзорных в интернете конечно
Народная мудрось
всем все никому ничего(с).
Re[6]: Data Access Layer (EF/Linq2Sql and others)
От: DuШes  
Дата: 25.03.09 13:27
Оценка:
Здравствуйте, Tom, Вы писали:

Z>>Вобщем-то NHibernate получается довольно неплох, кроме того, что кеш первого уровня у него отключить проблематично (хотя я не могу придумать зачем, кроме экономии памяти).

Tom>А нафик он нам нужен. Что у насм будет — это свой кэш на основе SqlDependency. При этом естественно что SqlDependency будет создаваться на список обьектов, а не на каждый обьект своя.

Z>>Поддержку связей, коллекций и т.п. можно просто не использовать. Есть linq провайдер, правда не полный, некоторые запросы создать на нем в принципе невозможно. Впрочем для сложных запросов я бы использовал чистый сиквел или hql. Язык запросов почти идентичен сиквелу и почти идентичный сиквел и генерирует. Т.е. сюрпризов со странными запросами к базе без связей, коллекций и lazy load'а не будет.


Z>>Осталось руками сделать тестовое приложение и выбрать генератор который нагенерит по базе то, что получилось.

Tom>осталось хотя бы прочитать доки вводные по всем тулам, сделать матрицу по оценке их и провести эту самую оценку. Уфффф ((((
Tom>нехватает таких статей обзорных в интернете конечно

ну вот как раз и будет обзор не забудьте поделиться результатами
Re[7]: Data Access Layer (EF/Linq2Sql and others)
От: Tom Россия http://www.RSDN.ru
Дата: 25.03.09 13:36
Оценка: :)
DШ>ну вот как раз и будет обзор не забудьте поделиться результатами
Чукча читатель в основном (
Народная мудрось
всем все никому ничего(с).
Re[6]: Data Access Layer (EF/Linq2Sql and others)
От: Ziaw Россия  
Дата: 25.03.09 13:40
Оценка:
Здравствуйте, Tom, Вы писали:

Z>>Вобщем-то NHibernate получается довольно неплох, кроме того, что кеш первого уровня у него отключить проблематично (хотя я не могу придумать зачем, кроме экономии памяти).

Tom>А нафик он нам нужен. Что у насм будет — это свой кэш на основе SqlDependency.

Там в сессии хранится что-то типа хеша (Type, PK) -> (object obj, object[] propertyValues).

ID -> obj обеспечивает единичность экземпляра в рамках одной сессии (я использую сессии длиной в транзакцию).

ID -> propertyValues хранит копию данных из базы до маппинга для dirty checking, от него можно отказаться используя StatelessSession, но она вообще не умеет сохранять объекты.

Tom>осталось хотя бы прочитать доки вводные по всем тулам, сделать матрицу по оценке их и провести эту самую оценку. Уфффф ((((


Вобщем-то они сильно разные по для составления матрицы. Речь идет о выборе идеологии, а разные идеологии в одну матрицу ложатся плохо. Так что по дню на каждый фреймворк для написания небольшого тестового приложения будут совсем не лишними.

P.S. Если не секрет, чем не угодили BLToolkit и iBatis?
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
Re[5]: Data Access Layer (EF/Linq2Sql and others)
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 25.03.09 14:37
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, Tom, Вы писали:


Tom>>Да, абсолютно согласен, ещё я хочу отмести тех кто не позволяет гибко управлять генерацией C#/SQL. И тех у кого нет будущего. Тоесть Linq2Sql/EF тоже похоже уходят. По крайней мере Linq2Sql на 90% отметается


Z>Вобщем-то NHibernate получается довольно неплох, кроме того, что кеш первого уровня у него отключить проблематично


Stateless сессии уже есть в NHibernate 2.0

Z>(хотя я не могу придумать зачем, кроме экономии памяти).


Stateless сессия может быть полезной, например, для вставки большого объема данных.
Re[6]: Data Access Layer (EF/Linq2Sql and others)
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 25.03.09 14:42
Оценка: 8 (1)
Здравствуйте, Tom, Вы писали:

Z>>Вобщем-то NHibernate получается довольно неплох, кроме того, что кеш первого уровня у него отключить проблематично (хотя я не могу придумать зачем, кроме экономии памяти).

Tom>А нафик он нам нужен. Что у насм будет — это свой кэш на основе SqlDependency. При этом естественно что SqlDependency будет создаваться на список обьектов, а не на каждый обьект своя.

Кеш первого уровня NH, это часть Unit of Work.
Re[7]: Data Access Layer (EF/Linq2Sql and others)
От: Tom Россия http://www.RSDN.ru
Дата: 25.03.09 14:55
Оценка:
Z>P.S. Если не секрет, чем не угодили BLToolkit и iBatis?
iBatis пока вообще незнаю что такое, добавлю в список.

BLToolkit — своей генерилки entity нет как я понимаю.
Потом я не совсем представляю как аргументировать его использование перед начальством.
Если его использовать — то надо генерить код не на лету в runtime а в compile time.
В общем выбор то пока не сделан, так что все аргументя рассматриваются
Народная мудрось
всем все никому ничего(с).
Re[8]: Data Access Layer (EF/Linq2Sql and others)
От: Aen Sidhe Россия Просто блог
Дата: 25.03.09 14:56
Оценка:
Здравствуйте, Tom, Вы писали:

Z>>P.S. Если не секрет, чем не угодили BLToolkit и iBatis?

Tom>iBatis пока вообще незнаю что такое, добавлю в список.

Tom>BLToolkit — своей генерилки entity нет как я понимаю.

Tom>Потом я не совсем представляю как аргументировать его использование перед начальством.
Tom>Если его использовать — то надо генерить код не на лету в runtime а в compile time.
Tom>В общем выбор то пока не сделан, так что все аргументя рассматриваются

Там есть тулза. Её в Post Build пихаешь и всё в компайл-тайм генерится.
С уважением, Анатолий Попов.
ICQ: 995-908
Re[9]: Data Access Layer (EF/Linq2Sql and others)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.03.09 15:26
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

AS>Здравствуйте, Tom, Вы писали:


Z>>>P.S. Если не секрет, чем не угодили BLToolkit и iBatis?

Tom>>iBatis пока вообще незнаю что такое, добавлю в список.

Tom>>BLToolkit — своей генерилки entity нет как я понимаю.

Tom>>Потом я не совсем представляю как аргументировать его использование перед начальством.
Tom>>Если его использовать — то надо генерить код не на лету в runtime а в compile time.
Tom>>В общем выбор то пока не сделан, так что все аргументя рассматриваются

AS>Там есть тулза. Её в Post Build пихаешь и всё в компайл-тайм генерится.


Да и T4 в студии есть. По метаданным все что угодно сгенерить можно.
Re[10]: Data Access Layer (EF/Linq2Sql and others)
От: Aen Sidhe Россия Просто блог
Дата: 25.03.09 15:29
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Aen Sidhe, Вы писали:


AS>>Здравствуйте, Tom, Вы писали:


Z>>>>P.S. Если не секрет, чем не угодили BLToolkit и iBatis?

Tom>>>iBatis пока вообще незнаю что такое, добавлю в список.

Tom>>>BLToolkit — своей генерилки entity нет как я понимаю.

Tom>>>Потом я не совсем представляю как аргументировать его использование перед начальством.
Tom>>>Если его использовать — то надо генерить код не на лету в runtime а в compile time.
Tom>>>В общем выбор то пока не сделан, так что все аргументя рассматриваются

AS>>Там есть тулза. Её в Post Build пихаешь и всё в компайл-тайм генерится.


G>Да и T4 в студии есть. По метаданным все что угодно сгенерить можно.


Я имел ввиду код, который BLToolkit генерирует во время работы программы.
С уважением, Анатолий Попов.
ICQ: 995-908
Re[7]: Data Access Layer (EF/Linq2Sql and others)
От: Tom Россия http://www.RSDN.ru
Дата: 25.03.09 19:05
Оценка:
A>Кеш первого уровня NH, это часть Unit of Work.

Буду читать и разбираться. Но у меня на этот счёт другое мнение, почему бы просто всем методам DAL не принимать в качестве параметра DbTransaction. И я слабо представляю как можно реализовать Unit of Work, на основе только кэша. Наример если нам надо вызвать стору, получить результат и на его основе поменять несколько entity и вызвать ещё одну стору. Как тут обойтись только одним кэш-ем, непонятно. Но опять же это возможно из за моей неграмотности. Буду читать...
Народная мудрось
всем все никому ничего(с).
Re[11]: Data Access Layer (EF/Linq2Sql and others)
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 25.03.09 23:38
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

AS>Я имел ввиду код, который BLToolkit генерирует во время работы программы.


Есть утиль, которая генерит всё и сохраняет в либу. В рантайме BLToolkit проверяет её наличие, и если она есть, то юзает её и ничего не генерит... Именно про запихивание её в пост-билд была речь выше.
[КУ] оккупировала армия.
Re: Data Access Layer (EF/Linq2Sql and others)
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 25.03.09 23:41
Оценка: 1 (1)
Здравствуйте, Tom, Вы писали:

Tom><skipped>


Мой выбор — BLToolkit + самопальный генератор. Эта связка умеет всё вышеперечисленное. Прозначная поддержка транзакций вроде не входит в либу, но на форуме есть простой класс, который добавляет эту фичу.
[КУ] оккупировала армия.
Re[8]: Data Access Layer (EF/Linq2Sql and others)
От: IT Россия linq2db.com
Дата: 25.03.09 23:50
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>BLToolkit — своей генерилки entity нет как я понимаю.


Можно использовать генерилку Linq2SQL или любую другую.
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: Data Access Layer (EF/Linq2Sql and others)
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 26.03.09 06:49
Оценка:
Здравствуйте, Tom, Вы писали:

A>>Кеш первого уровня NH, это часть Unit of Work.


Tom>Буду читать и разбираться. Но у меня на этот счёт другое мнение, почему бы просто всем методам DAL не принимать в качестве параметра DbTransaction.


Unit of Work, это бизнес-транзакция, т.е. она может включать в себя одну и более последовательный транзакций.


Unit of work модет делать следующее:

1) следить за тем, чтобы один и тот же объект не загружался из БД дважды в рамках одной Unit of Work
2) отслеживать изменения объектов, например, можно загрузить объекты из БД, часть из них поменять и Unit of Work сама определит какие объекты нужно обновить в БД
3) выполнять каскадные операции, например, при вставке или удалении графа объектов Unit of Work определит в какой последовательности нужно выполнить SQL операторы (DELETE, INSERT)
4) блокировки: пессимистические (SELECT FOR UPDATE), оптимичтические (на основе версий)
и пр.

1), 2), 3), 4) есть в NHibernate
2), 3) есть в Linq2SQL


Tom>И я слабо представляю как можно реализовать Unit of Work, на основе только кэша. Наример если нам надо вызвать стору, получить результат и на его основе поменять несколько entity и вызвать ещё одну стору. Как тут обойтись только одним кэш-ем, непонятно. Но опять же это возможно из за моей неграмотности. Буду читать...
Re[8]: Data Access Layer (EF/Linq2Sql and others)
От: Dog  
Дата: 26.03.09 07:06
Оценка:
Tom>BLToolkit — своей генерилки entity нет как я понимаю.
здесь
Автор: Andy77
Дата: 25.08.06

Самый большой плюс тулкита, как для меня, это то, что его просто и приятно допиливать руками
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[4]: Data Access Layer (EF/Linq2Sql and others)
От: Severn Россия  
Дата: 26.03.09 07:40
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Да, абсолютно согласен, ещё я хочу отмести тех кто не позволяет гибко управлять генерацией C#/SQL. И тех у кого нет будущего. Тоесть Linq2Sql/EF тоже похоже уходят. По крайней мере Linq2Sql на 90% отметается


Не позволяют управлять генерацией? Или нет будущего?
Сам ни тем ни другим не пользовался — поэтому вопрос.
Re[9]: Data Access Layer (EF/Linq2Sql and others)
От: Tom Россия http://www.RSDN.ru
Дата: 26.03.09 08:59
Оценка:
Dog>Самый большой плюс тулкита, как для меня, это то, что его просто и приятно допиливать руками
А нам оно надо? Мы бы с радостью платили за ком. продукт, который бы допиливали за наши деньги.
Народная мудрось
всем все никому ничего(с).
Re[9]: Data Access Layer (EF/Linq2Sql and others)
От: Tom Россия http://www.RSDN.ru
Дата: 26.03.09 09:02
Оценка:
Здравствуйте, achmed, Вы писали:

A>Здравствуйте, Tom, Вы писали:


A>>>Кеш первого уровня NH, это часть Unit of Work.


Tom>>Буду читать и разбираться. Но у меня на этот счёт другое мнение, почему бы просто всем методам DAL не принимать в качестве параметра DbTransaction.


A>Unit of Work, это бизнес-транзакция, т.е. она может включать в себя одну и более последовательный транзакций.



A>Unit of work модет делать следующее:


A>1) следить за тем, чтобы один и тот же объект не загружался из БД дважды в рамках одной Unit of Work

A>2) отслеживать изменения объектов, например, можно загрузить объекты из БД, часть из них поменять и Unit of Work сама определит какие объекты нужно обновить в БД
A>3) выполнять каскадные операции, например, при вставке или удалении графа объектов Unit of Work определит в какой последовательности нужно выполнить SQL операторы (DELETE, INSERT)
A>4) блокировки: пессимистические (SELECT FOR UPDATE), оптимичтические (на основе версий)
A>и пр.

A>1), 2), 3), 4) есть в NHibernate

A>2), 3) есть в Linq2SQL

не, я всё понимаю, но как в том же NHibernate-е в рамках одной транзакции, выполнить скажем сохранение обьекта в БД, и вызвать стору. По интерфейсу и описанию Unit of work я этого не понял.
Народная мудрось
всем все никому ничего(с).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.