powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ORM: совершенству нет предела или когда, все же, необходимо остановиться
19 сообщений из 19, страница 1 из 1
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36943752
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из серии: "...дело было вечером, делать было нечего..."

Преамбула.
Есть товар. Со множеством атрибутов. Естественно, товары каталогизированы. Естественно они хранятся на складах. У каждого товара множество цен/наценок/скидок. Есть клиент торговой организации. У него есть всякие-разные настройки. Часть из них: ограничения на уровне атрибутов товаров: бренды, группы товаров, склады, цены/скидки/наценки. У клиента есть менеджер. И, естественно, у менеджера клиент - не один. Дальше, а еще есть много чего, перечислять думаю не надо - в общих чертах все понятно.

Амбула.
Посмотришь на диаграмму классов: "...Эх, красота-то какая! Лепота!.." (©) Все как книжка пишет. "...Сразу стало ясно кто где. Свинья Петров - вон. Свинья Сидоров - вон..." Но, вот, когда все это начинает фунциклировать - то получается, как в том известном
анекдоте
«Здравствуйте! Мы приветствуем вас на борту суперлайнера. Сейчас стюардессы показывают вам, как пользоваться спасательными жилетами. У нас на борту на 2 этаже вы можете покушать в прекрасном ресторане, на 3 – для вас открыта дискотека, на 4 этаже для вас выступают звезды эстрады, и наконец на 5 этаже есть стадион, где вы можете поиграть в футбол со знаменитыми футболистами!
Теперь пристегните, пожалуйста, ремни, и мы со всей этой ХЕРНЕЙ НА БОРТУ ПОПЫТАЕМСЯ взлететь».

Пока это все подымется - можно не то, что упиться чаем/кофе, но и утопиться в нем. И это хорошо, если страничка отработает, а не по time-out'у отвалиться. Вот такое www'шное приложение досталось мне в наследство. Вот смотрю я на все это и думаю: все эти ORM'ы годятся только для лабораторных/курсовых на "...кошках тренироваться..." или авторы моего землетрясения сильно переусердствовали? Хотя, если честно, то все, вроде, - по делу. Но когда, при том же тривиальном построении grid'а, в цикле поодиночно подрывается "...Волга со всеми ее пристанями и пароходами..." - руки так и чешутся написать обычный запрос, который скопом все вытянет за доли секунды. К чему это я: совершенству совращенству нет предела © или, таки, наплевать на "империалистический заговор" и чистоту кода и юзать в особо узких местах обычные запросы? Хотелось бы, все-таки, расставить все точки над i. Как правильно юзать ORM'ы? Все ли необходимо запихивать? Какие рекомендации для больших объемов данных? Какими приемами можно "оживить" в моем конкретном случае приложение?
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36944059
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мартышка, знаете ли, тоже долго с очками сладить не могла. Да, плюсы которые даёт ORM - не бесплатны. Это не волшебная палочка, которая всё делает хорошо. А сложный инструмент, которым надо уметь пользоваться. И всё будет хорошо.
Так что смотрите, что написали программисты. Моск, профайлер и гугл в руки, ищите проблемы, да решайте их.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36944164
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftКак правильно юзать ORM'ы? Все ли необходимо запихивать? Какие рекомендации для больших объемов данных? Какими приемами можно "оживить" в моем конкретном случае приложение?
1. Использовать хибер в проектах любой сложности и не париться.
2. Использовать хранимые процедуры и/или обычные запросы (NamedQuery), которые хранятся в hbm.xml.
3. Обязательно всё это добро должно быть типизировано.
4. Обязательно возвращать в приложение только те данные которые должны использоваться. Ничег лишнего. Только то, что требует задача.
5. Обязательно в приложении предусматриваем фильтры и пейджинг. Не мне Вам рассказывать, что фильтры и пейджинг должны быть SQL-ориентированы.
6. Прямые выборки сущностей могут юзаться только в хеллоуворд проектах, которые не знают, что такое большие объемы данных, как следствие оптимизация запросов. Тут Вы несомненно правы.

Пример на пальцах: Вам нужно вывести некий кастомный набор (Products + Categories) {Products.ProductID, Products.ProductName, Categories.CategoryID, Categories.CategoryName }

Пришем хранимку (но я предпочитаю больше не хп, а чистые запросы в NamedQuery, но это сути не меняет):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE ProductList
AS
BEGIN	
	SET NOCOUNT ON;

	SELECT p.ProductID
		  ,p.ProductName   
		  ,p.CategoryID 
		  ,c.CategoryName  
	FROM Products p
	JOIN Categories c on p.CategoryID = c.CategoryID
END

Наш ProductWithCategory.hbm.xml:

Код: plaintext
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="DAL.Domain" assembly="DAL">
  <sql-query name="ProductList" callable="true">        
    EXEC ProductList
  </sql-query>
</hibernate-mapping>

В модели определяем новый класс:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
using System;

namespace DAL.Domain
{
    public class ProductWithCategory
    {
        public virtual int ProductID { get; set; }
        public virtual string ProductName { get; set; }
        public virtual int CategoryID { get; set; }
        public virtual string CategoryName { get; set; }
    }
}

В дале продуктов в методе получения данных:

Код: plaintext
1.
2.
return session.GetNamedQuery("ProductList")
    .SetResultTransformer(new AliasToBeanResultTransformer(typeof(ProductWithCategory)))
    .List<ProductWithCategory>();

P.S. В боевых условиях ббывает так, что имена полей рекордсета (хп или прямого запроса) не совпадают с именами свойств класса: для этого курим свой IResultTransformer.

Пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
public class ProductWithCategory
{
    public virtual int ProductID { get; set; }
    public virtual string ProductName { get; set; }
    public virtual int X { get; set; } // А запрос возвращает CategoryID !!! Что делать нах? :)
    public virtual string CategoryName { get; set; }
}

На помощь приходит МСУ со своим гавнокодцем

Код: plaintext
1.
2.
var query = session.CreateSQLQuery("EXEC ProductList");
var transformer = new ResultTransformer(typeof(ProductWithCategory), "ProductID", "ProductName", "X", "CategoryName");
var result = query.SetResultTransformer(transformer).List<ProductWithCategory>();

ResultTransformer
Код: plaintext
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 ResultTransformer : IResultTransformer
{
    private Type result;
    private PropertyInfo[] properties;

    public ResultTransformer(Type result, params string[] names)
    {
        this.result = result;
        List<PropertyInfo> props = new List<PropertyInfo>();
        foreach (string name in names)
        {
            props.Add(result.GetProperty(name));
        }
        properties = props.ToArray();
    }

    public object TransformTuple(object[] tuple, string[] aliases)
    {
        object instance = Activator.CreateInstance(result);
        for (int i = 0; i < tuple.Length; i++)
        {
            properties[i].SetValue(instance, tuple[i], null);
        }
        return instance;
    }

    public IList TransformList(IList collection)
    {
        return collection;
    }
}


7. То есть по сути Вы пишите полностью свой DAL, но на платформе хибера. Ничего не изменилось - мы как кодили много лет назад, так и продолжаем это делать. Ни один фреймворк с мега ORM не способен за нас это сделать. Мы можем, разве что, на них опереться. Но делать придётся своё и заново. Такова моя лирика :)
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36944188
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8. Для уменьшения хардкодности и централизованного обращения к полям используйте в Ваших сущностях константы полей:

Код: plaintext
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.
public class Category
{
    public static class Properties
    {
        public const string CategoryId = "CategoryId";
        public const string CategoryName = "CategoryName";
        public const string Products = "Products";
    }

    public Category()
    {
        Products = new List<Product>();
    }

    public virtual int CategoryId { get; set; }
    public virtual string CategoryName { get; set; }
    public virtual IList<Product> Products { get; protected set; }

    public virtual void AddProduct(params Product[] products)
    {
        foreach (var product in products)
        {
            Products.Add(product);
            product.Category = this;
        }
    }
}

Все телодвижения с полями сущности - только через Category.Properties.CategoryId, ...
Перечисления полей можно заложить и в енумы (что в некотором смысле даже более красиво). Вообщем, хардкод в приложении нужно сводить к минимуму.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36949008
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо огромное за развернутый ответ. Дальше буду по мере осознания пунктов и наличия отсутствия свободного времени.
МСУ
1. Использовать хибер в проектах любой сложности и не париться.

Вот он, как раз, родимый и используется. Правда древний: 1.2.0.3001 . Причем вылезла несовместимость с последним 2.1.2.4000
К примеру:
Код: plaintext
1.
2.
3.
4.
5.
class HO
{
	public virtual decimal Id { get; set; }
	public virtual string Description { get; set; }
}
и все.
Под 2.1.2.4000
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQLQuery = (ISQLQuery)session.CreateSQLQuery(@"
select
  id as ""Id"",
  name as ""Description""
from
  SmthTable
where
  (parent_id=:parent_id)
").SetResultTransformer(Transformers.AliasToBean(typeof(HO)));
SQLQuery.SetParameter("parent_id",  12345 );

IList<HO>
	_List_HO_ = SQLQuery.List<HO>();
отрабатывает без проблем. А под 1.2.0.3001
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQLQuery = (ISQLQuery)session.CreateSQLQuery(@"
select
  id as ""Id"",
  name as ""Description""
from
  SmthTable
where
  (parent_id=:parent_id)
").SetResultTransformer(Transformers.AliasToBean(typeof(HO)));
падает с
NHibernate.QueryException
Return types of SQL query were not specified

а
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQLQuery = (ISQLQuery)session.CreateSQLQuery(@"
select
  id as ""Id"",
  name as ""Description""
from
  SmthTable
where
  (parent_id=:parent_id)
").AddEntity(typeof(HO));
NHibernate.MappingException
No persister for: AnyTestOracleOld.HO

Я так понимаю требует mapping. Но это же гемор. Особенно в контексте:
МСУ
7. То есть по сути Вы пишите полностью свой DAL, но на платформе хибера. Ничего не изменилось - мы как кодили много лет назад, так и продолжаем это делать.

Т.е.: необходимо мне наполнить вот хоть тот же ComboBox. Получается я должен для этого не только какой-то temp'овый класс родить (ладно - с этим я еще смирюсь), но и еще вдобавок и map-файл нарисовать? И какой тогда сермяжный смысл в юзании хибера в качестве платформы именно в этом конкретном случае? Просто для общности кода? Когда обычным запросом - это ж гораздо проще.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36949035
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BTW, вот еще: NHibernate-2.1.2.GA && inherited classes, NHibernate-2.1.2.GA && map\'инг на функцию с параметром, NHibernate-2.1.2.GA && NamedQuery когда хибер (просто в качестве платформы) не удовлетворил мои запросы.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36949651
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Обновляйте хибер
2. Не нравится типизация, возвращайте обычный IList в комбобокс или просто юзайте ISQLQuery.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36950617
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
1. Обновляйте хибер

Да, вот, подозреваю, что совместимости снизу вверх - нЭт. Но, вообще-то, как-то нужно будет собраться с духом и окончательно и бесповоротно подтвердить (или опровергнуть) эту гипотезу. BTW, это все касается 2.1.2
МСУ
или просто юзайте ISQLQuery.

Гм... Не могу понять, что Вы подразумеваете... На пальцах покажите, pls...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36951031
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftBTW, вот еще: NHibernate-2.1.2.GA && inherited classes, NHibernate-2.1.2.GA && map\'инг на функцию с параметром, NHibernate-2.1.2.GA && NamedQuery когда хибер (просто в качестве платформы) не удовлетворил мои запросы.

Боюсь, что вы не удовлетворили требования хибера(просто в качестве программиста).

В первом топике тупо не удосужились замапить иерархию классов.
Во втором и третьем страдаете фигней. Замапьте Staff связью 1-1 или 1-много), да вызывайте classStaff.Staff.Salary.

В общем, читайте документацию, NHibernate in Action и на баррикады. Работа с ORM методом научного тыка интересна, но полна бессмысленных и беспощадных препятствий.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36951338
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftНа пальцах покажите, pls...
Код: plaintext
ISQLQuery query = session.CreateSQLQuery(...); 
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36953245
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorEx_SoftBTW, вот еще: NHibernate-2.1.2.GA && inherited classes, NHibernate-2.1.2.GA && map\'инг на функцию с параметром, NHibernate-2.1.2.GA && NamedQuery когда хибер (просто в качестве платформы) не удовлетворил мои запросы.

В первом топике тупо не удосужились замапить иерархию классов.

/me думает: гм... В первом топике всего лишь два класса: ClassStaff (cs + map) и ClassStaffWithReallyBirthDate (cs + map). Какого map\'инга еще нужно?
SolYUtor
Во втором и третьем страдаете фигней. Замапьте Staff связью 1-1 или 1-много), да вызывайте classStaff.Staff.Salary.

Скажите, а как эта Ваша рекомендация поможет:
- во втором топике заменить вызов функции с параметром
- в третьем топике возвратить значение функции?

BTW, если Вы еще не догадались, все представленные мной примеры - дрозофилы . На самом деле все, естественно, не так просто.

P.S. Документацию - я читаю. Но, вот, ответов на мои вопросы я там не нашел. Если дадите конкретно ссылку - буду благодарен. "NHibernate in Action" - тоже просмотрел. Но, вот, "...in Action" (причем не только в конкретно этой, а - во всех, IMHO), как правильно заметил МСУ, на хеллоуворд\'ном уровне. Т.е. ответа на что-то хоть слегка нетривиальное - там, практически, не найти.

МСУ
Код: plaintext
ISQLQuery query = session.CreateSQLQuery(...); 

Кажется понял: т.е. Вы предлагаете вместо хиберовских юзать native SQL ?

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36953258
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftКажется понял: т.е. Вы предлагаете вместо хиберовских юзать native SQL ?
Для "разовых" запросов можно поюзать нетипизированные результаты из IList. Но для бизнес-объектов (которые хотя бы два и более раза применяются в проекте) - обязателем маппинг.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36953292
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
Для "разовых" запросов можно поюзать нетипизированные результаты из IList. Но для бизнес-объектов (которые хотя бы два и более раза применяются в проекте) - обязателем маппинг.

Это - понятно, но, вот, только тогда как это увязать с
МСУ
4. Обязательно возвращать в приложение только те данные которые должны использоваться. Ничег лишнего. Только то, что требует задача.

???
Т.е.: сейчас у меня есть Client со ссылкой на Manager у которого коллекция ClientsOfManager, содержащая, естественно Client'ов. И, вот, получается, согласно п.4, если мне, к примеру, в одном месте (не разово) необходимо вывести какие-то данные о Client only (причем по одним полям) - я должен сделать выборку только по Client. В другом же месте (также - не разово) необходимо вывести какие-то данные о Client (причем по другим полям) + Manager. И тут я должен сделать выборку по Client'у, с'join'еному с Manager. А в третьем месте... И т.д.
И, получается, на каждый запрос, необходимо, потому как:
МСУ
3. Обязательно всё это добро должно быть типизировано.

писать класс + map-файл. Ситуация мне начинает напоминать один
анекдот
Один человек нанял извозчика, чтобы подъехать. Сел. А тут сразу надо под горку. Извозчик и говорит:
- Слы... Мил человек, у меня лошадка старая уже, немощная - не вытянет. Подтолкни, будь добр.
Ну... Человек вылез и давай толкать. Поднялись на горку. Спускаться значит. Извозчик и говорит:
- Слы... Мил человек, у меня лошадка старая уже, немощная, а пролетка - тяжелая. Боюсь - понесет. Попридержи, будь добр.
Человек давай придерживать. Спустились. И тут уже ему выходить. Давай он расплачиваться с извозчиком и говорит:
- Ну... Со мной все понятно - я нанял тебя потому, что хотел подъехать. С тобой - тоже. Ты подрядился потому, что денег хотел заработать. Одно только непонятно: нафига мы с собой лошадь брали?

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36953360
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft

/me думает: гм... В первом топике всего лишь два класса: ClassStaff (cs + map) и ClassStaffWithReallyBirthDate (cs + map). Какого map\'инга еще нужно?

Этого.

Ex_Soft
Скажите, а как эта Ваша рекомендация поможет:
- во втором топике заменить вызов функции с параметром
- в третьем топике возвратить значение функции?

Из второго:
Код: plaintext
<property name="SalaryAdd" formula="(select s.Salary from Staff s where (s.ID=ID))"/>

Вид этих запросов навевает мысль, что вы пытаетесь сджойнить по Id некую другую сущность. Почему бы просто ее не замапить как ссылку?

Из третьего
Код: plaintext
  <sql-query name="NamedQuery1">\n    <return alias="NamedQuery1" class="TestIV.ClassStaff">\n      <return-property name="ID" column="ID"/>\n      <return-property name="Name" column="Name"/>\n      <return-property name="Salary" column="Salary"/>\n      <return-property name="SalaryAdd" column="SalaryAdd"/>\n    </return>\n    select\n      s.*,\n      testdb.dbo.SalaryAdd(s.Salary, :pCoeff) as SalaryAdd\n    from\n      Staff s\n    where\n      s.ID=:pID\n  </sql-query>\n</hibernate-mapping>

Расчёт функцией БД при наличии объектной модели - это не слишком хорошее решение, делайте это в своём приложении. Хибер позволяет вернуть в результате запроса скалярныю величину. Используйте эту возможность.
И не надо пытаться мапить немапуемое. Использовать чистый SQL - только в самом крайнем случае.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36953433
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftЭто - понятно, но, вот, только тогда как это увязать с ...
Вы не правы в одном. Это - является исключением правила. И увязывать это не нужно с чем-то другим.
В идеале - всё должно быть типризировано. Но для разовых работ можно сделать исключение.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36954876
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtor Этого.
/me думает: хорошо, хоть, ссылка не на это ... Там всего лишь пара-тройка строк: можете, так сказать, "...чиста канкретна..." показать на пальцах?
SolYUtor
Из второго:
Код: plaintext
<property name="SalaryAdd" formula="(select s.Salary from Staff s where (s.ID=ID))"/>
Вид этих запросов навевает мысль, что вы пытаетесь сджойнить по Id некую другую сущность. Почему бы просто ее не замапить как ссылку?

Павтаряюсь:
Ex_Soft
все представленные мной примеры - дрозофилы . На самом деле все, естественно, не так просто.

Т.е.: все максимально упрощено. Показана суть проблемы. Вы даже можете, приложив минимум усилий и проделав copy -> paste, попробовать у себя представленный код. Или Вам больше нравятся километровые простыни из реальных проектов с проблемой в 1024 строке?
SolYUtorРасчёт функцией БД при наличии объектной модели - это не слишком хорошее решение, делайте это в своём приложении. Хибер позволяет вернуть в результате запроса скалярныю величину. Используйте эту возможность.
Ну что мне Вам сказать?.. Может для хеллоуворд'ных проектов, созданных по принципу "ДаешЪ каждому приложению свою, отдельно взятую БД", это и "...хорошее решение..."... Но БД, которую юзает мое приложение, помимо его, юзают еще, как минимум, ~50 приложений. И цельная армия оракулистов запихивает эту бизнес-логику, которая может поменяться в любой момент, в БД. Дальше продолжать прописные истины не буду...
SolYUtorИ не надо пытаться мапить немапуемоеСм. выше
SolYUtor Использовать чистый SQL - только в самом крайнем случаеСм. ниже
МСУЭто - является исключением правила
А-а-а... А то я уж перепугался: вместо того, чтобы иметь нормальные человеческие яйца
сиречь - полноценного Client'а, мы имеем кастрированного Client'та во всех его ипостасиях. Не... Давайте исключения, пока, рассматривать не будем. Я ведь не зря в названии топика акцентировал: "...или когда, все же, необходимо остановиться". Вот, к примеру: я так подозреваю, если здесь в Client'е вместо Manger'а юзать ManagerId, IMHO, Client был бы пошустрее. Или я не прав?
offtop
МСУно я предпочитаю больше не хп, а чистые запросы в NamedQuery

А чего?

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36956212
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft, Вам шашечки, ехать или просто поп...еть? )
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36959191
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В идеале - ехать быстро с шашечками, попутно ведя беседу

А, если серъезно, то программа минимум - ускорить приложение (вон формирование прайс-листа по всего лишь одной группе товара запустил - пошла 15-я минута
). Ну, а по максимуму - расставить все точки над і в контексте применения хибера при огромных объемах данных.
...
Рейтинг: 0 / 0
ORM: совершенству нет предела или когда, все же, необходимо остановиться
    #36959227
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftВ идеале - ехать быстро с шашечками, попутно ведя беседу
Ну так а в чём сложности? Весь (90%) дата-слой типизируем через DAL (можете применить паттерн проектирования, очень удобен имхо Repository), остальные 10% - под задачи вида "дёрнуть сервер за яйца и убежать" (для "комбобоксов"):

Код: plaintext
var users = session.CreateSQLQuery("SELECT UserName, Password FROM Users").List();

Всё, ORM свои задачи покрыла на 100% (CreateSQLQuery - это тоже хиберовская фича, поэтому 10% засчитываем в копилку)

Ex_SoftА, если серъезно, то программа минимум - ускорить приложение (вон формирование прайс-листа по всего лишь одной группе товара запустил - пошла 15-я минута
). Ну, а по максимуму - расставить все точки над і в контексте применения хибера при огромных объемах данных.
Ну так ускоряйте, в чём сложность? Как напишете запросы и маппинг к ним, так оно и поплывёт. Не вижу никаких сложностей. Вообще.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ORM: совершенству нет предела или когда, все же, необходимо остановиться
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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