Re[24]: Entity Framework за! и против!
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.07.14 20:39
Оценка: +2 -1 :)
Здравствуйте, vdimas, Вы писали:

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


IT>>Это не делает чести ни банкам, ни биржам. Местами они так, конечно, работают, но видно невооруженным взглядом, что очень плохо работают, медленно и неэффективно. По мере сил мы эту ситуацию меняем и надо признать не без успеха.


V>Вообще-то в последние лет 5 идет полный отказ вообще от каких-либо технологий "управляемых VM", бо они работают плохо и дают крайне низкую фактическую статистику надежности.

Это только в твоей голове идет. А по факту почти 100% веб-сайтов используют «управляемые вм», почти 100% line-of-business систем от crm до складского учета и управления персоналом. Процессинг крупнейших банков написан на java, android и windows phone приложения по большей части на java и .net. Самый массовый почтовый сервер — exchange написан на .net

И никто не собирается отказываться.

А где ты отказ видел?
Re[13]: Entity Framework за! и против!
От: IB Австрия http://rsdn.ru
Дата: 07.07.14 22:09
Оценка:
Здравствуйте, QrystaL, Вы писали:


QL>NotSupportedException: "Explicit construction of entity type '...' in query is not allowed."

Это linq2sql? у меня работает прекрасно, без замечаний, генерит такой же результат как и groupJoin — все по честному.
Мы уже победили, просто это еще не так заметно...
Re[14]: Entity Framework за! и против!
От: QrystaL Украина  
Дата: 08.07.14 07:13
Оценка:
Здравствуйте, IB, Вы писали:
IB>Это linq2sql? у меня работает прекрасно, без замечаний, генерит такой же результат как и groupJoin — все по честному.

Это стандартное ограничение Linq2Sql — чтобы вышеприведенная конструкция работала, нужны отдельные типы Order и Product.
private SqlExpression VisitMemberInit(MemberInitExpression init) {
    MetaType mt = this.services.Model.GetMetaType(init.Type);
    if (mt.IsEntity) {
        throw Error.CannotMaterializeEntityType(init.Type);
    }
    // [skipped]
}
Re[24]: Entity Framework за! и против!
От: IT Россия linq2db.com
Дата: 08.07.14 13:48
Оценка: 2 (1) +4
Здравствуйте, vdimas, Вы писали:

V>Вообще-то в последние лет 5 идет полный отказ вообще от каких-либо технологий "управляемых VM", бо они работают плохо и дают крайне низкую фактическую статистику надежности.


Кажется, я начинаю догадываться. Ты про какую-то другую альтернативную реальность, я прав?

V>Да и тебя несет малость. Сейчас не 2005-й год, чтобы так задорно петь дифирамбы дотнету — это нелепо смотрится в 2014-м. Поезд уже ушел. Технология в течении 10 лет показывала себя как ненадежная и неэффективная.


Не стоит рассуждать о дотнете, который был в 2005-м году сегодня, когда на дворе 2014-й. Поставь новую версию и убедись сам.

V>Это по-факту попыток использования на крупнейших мировых биржах и банках.


Опять рупь за сто Я работаю в крупнейшем мировом банке и в данный момент занимаюсь миграцией одной системы с "супернадёжного и суперэффективного" железа и софта на .NET. Причём именно её процессинговой, серверной части. Морда и так уже давно написана на .NET.

V>Сама платформа еще сырая и ты, как программист, тут бессилен, бо это вне твоей компетенции — ты лишь пользователь платформы.


Всё же обнови свою версию .NET на более свежую.

V>Определённую нишу она заняла — это там, где надо неторопливо выдавать что-то в веб на странички или как веб-сервисы или через родственные веб-ориентированные АПИ. Это ВСЁ! Т.е. из промышленного применения технологии — действительно всё! Там же, где требуется быстро и надежно — прямо на сегодня оттуда сие недоразумение вымыто, как и джава. Увы, сие медицинский факт. И до устаревания этого факта должно пройти примерно десяток лет, не меньше... чтобы критическая масса поколения next превысила опыт потери просто тонн денег и была выполнена еще одна попытка в этом направлении.


Одно из двух. Либо ты говоришь о софте, валовое количество которого не превышает пол процента, либо ты действительно из другой альтернативной реальности. В моей практике нестабильную работу приложений, написанных на .NET, можно пересчитать по пальцам одной руки и все они связаны либо с кривым нативным кодом, либо с кривыми руками программистов. Про эффективность я вообще молчу. На 80% процентов она определяется архитектурой приложения и небольшое отставание .net от нативного кода как правило легко компенсируется за счёт более высокого уровня технологии.

V>И не надо тут пальцы вейром насчет "по мере сил мы эту ситуацию меняем и надо признать не без успеха". Это всё введение в заблуждение непосвящённых читателей. Я прекрасно в курсе ЧТО ИМЕННО могли доверить пилить на дотнете, если речь о биржах и банках.


Дружище, я тебя хорошо понимаю. Последние несколько лет жизни ты потратил, находясь в плену иллюзий и домыслов, среди ветхих и безнадёжно устаревших технологий. И тебе трудно осознавать, что все эти годы потрачены зря. Но тебе придётся смириться. Не ты первый. Кто-то когда-то считал, что мир покоится на трёх слонах, кто-то утверждал, что 640KB памяти компьютеру хватит до скончания веков. Но технический прогресс остановить пока не получилось ни у кого.
Если нам не помогут, то мы тоже никого не пощадим.
Re[25]: Entity Framework за! и против!
От: fddima  
Дата: 08.07.14 16:02
Оценка:
Здравствуйте, IT, Вы писали:

V>>Это по-факту попыток использования на крупнейших мировых биржах и банках.

IT>Опять рупь за сто Я работаю в крупнейшем мировом банке и в данный момент занимаюсь миграцией одной системы с "супернадёжного и суперэффективного" железа и софта на .NET. Причём именно её процессинговой, серверной части. Морда и так уже давно написана на .NET.
Я никогда не работал на крупнейших банках — но только мой опыт 8-ми летний в вендорах банковского софта, показал, что все к уже тому времени когда я влился в это дело — перешли на дотнет (2006 год).
А на самом деле пацаны начали пробовать .NET ещё в бетах. И пока плюсники там всё ещё отлаживали свои формы — и они жутко маргали — по факту получилось, что нет был принят и до сих пор позиций не сдает. Если где-то существуют не дотнет приложения — то только legacy.
Я за свою опыт — самолично перевел карточный процессинг с легаси C/C++ на дотнет. И кстати, жалоб в итоге стало меньше, а точнее — пропали совсем. Потому что тот бред что был в C/C++ (и это не проблема языка, это проблема сложности поддержки, и разрешения проблем) — никуда не годился. Можно было часами медитировать, и медитировали по факту в сумме не одну сотню часов — и всё равно стабильной работы не добились. А вот легаси версия обросла процессом-креш-хэндлером со снятием минидампов и прочего. Только оно никак не окупилось — дампы показали, что креш происходит, из-за того, что environment уже запорчен, другими процессами, которые успешно отработали (когда?, часом раньше, или только что?). Короче говоря — в задаче где всё, что нужно получить сообщение, прогнать его через HSM с пристрастием — обработать и ответить — упасть не возможно. Я в нетной версии даже защитился от кривых дров HSM, и в случае buffer overrun/underrun — заложил жесткий FailFast. И... как и ожидалось — ну нет этого.
Так что в общем, Игорь, — люто плюсую.

PS: Я давно развязался с этими штуками. Теперь больше направлен на американский, и тоже банковский рынок. Как ни странно — там тоже везде используют дотнет.
Re[23]: Entity Framework за! и против!
От: Alexander Polyakov  
Дата: 08.07.14 20:51
Оценка:
AP>>... устранил проблемы связанные с динамическим SQL,
IT>Динамического SQL по ссылке не найдено. Ты не путаешь термин "динамический" с "plain"?
Хм..., попытаюсь понять, почему ты не нашел по ссылке динамического SQL. Вот здесь
Автор: Sinclair
Дата: 01.07.14
у Sinclair в пункте 2 динамический SQL или нет?
Re[24]: Entity Framework за! и против!
От: Ночной Смотрящий Россия  
Дата: 08.07.14 21:16
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

AP>Хм..., попытаюсь понять, почему ты не нашел по ссылке динамического SQL. Вот здесь
Автор: Sinclair
Дата: 01.07.14
у Sinclair в пункте 2 динамический SQL или нет?


Нет. Там попытка его замены статическим (фиговая).
Re[25]: Entity Framework за! и против!
От: Alexander Polyakov  
Дата: 08.07.14 22:25
Оценка:
AP>>Хм..., попытаюсь понять, почему ты не нашел по ссылке динамического SQL. Вот здесь
Автор: Sinclair
Дата: 01.07.14
у Sinclair в пункте 2 динамический SQL или нет?

НС>Нет. Там попытка его замены статическим (фиговая).
Это не динамический SQL?

2. Клеим строку динамически. Не очень важно — внутри SQL или снаружи:
q = 'select * from orders where 1=1 '
if (@shipDateFrom is not null)
q = q + 'AND where ShippedDate >= @shipDateFrom '
if (@shipDateTo is null)
q = q + 'AND ShippedDate <= @shipDateTo '
exec(q, @shipDateFrom, @shipDateTo);

Re[26]: Entity Framework за! и против!
От: Ночной Смотрящий Россия  
Дата: 08.07.14 22:53
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

AP>Это не динамический SQL?


С точки зрения клиента БД — нет, не динамический.
Re[24]: Entity Framework за! и против!
От: IT Россия linq2db.com
Дата: 09.07.14 00:34
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

IT>>Динамического SQL по ссылке не найдено. Ты не путаешь термин "динамический" с "plain"?

AP>Хм..., попытаюсь понять, почему ты не нашел по ссылке динамического SQL. Вот здесь
Автор: Sinclair
Дата: 01.07.14
у Sinclair в пункте 2 динамический SQL или нет?


А по твоей ссылке где пример устранения проблемы динамического SQL?
Если нам не помогут, то мы тоже никого не пощадим.
Re[27]: Entity Framework за! и против!
От: Alexander Polyakov  
Дата: 09.07.14 04:26
Оценка:
НС>С точки зрения клиента БД — нет, не динамический.
С точки зрения СУБД это динамический SQL. Это общепринятая трактовка термина “динамический SQL”. Именно этой трактовкой я и пользуюсь.
Re[25]: Entity Framework за! и против!
От: Alexander Polyakov  
Дата: 09.07.14 04:42
Оценка:
IT>А по твоей ссылке где пример устранения проблемы динамического SQL?
Листинг 1.1:
        private static void Example1(DateTime? date)
        {
            var postInfos = new {date}.Apply((с, p) => {
                var builder = new StringBuilder(@"
SELECT  Id, CreationDate
FROM    Post
WHERE   1 = 1");
                if (p.date.HasValue)
                {
                    builder.Append(@"
        AND CreationDate >= @Date");
                    с.Parameters.AddWithValue("@Date", p.date);
                }
                с.CommandText = builder.ToString();
                return default(IPostInfo);
            }).List();
        }


Или то же самое с заменой StringBuilder на Razor Листинг 3:
        private static void Example1(DateTime? date)
        {
            var posts = Query<IPostInfo>.New(new {date}, @"
SELECT  Id, CreationDate
FROM    Post
WHERE   1 = 1
@if (date.HasValue) {
        @:AND CreationDate >= @date
}").List();
        }
Re[28]: Entity Framework за! и против!
От: Ночной Смотрящий Россия  
Дата: 09.07.14 08:07
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

НС>>С точки зрения клиента БД — нет, не динамический.

AP>С точки зрения СУБД это динамический SQL.

Но мы то не СУБД обсуждаем, а клиентский доступ.
Re[29]: Entity Framework за! и против!
От: Alexander Polyakov  
Дата: 09.07.14 10:45
Оценка:
НС>Но мы то не СУБД обсуждаем, а клиентский доступ.
Мы обсуждаем как писать код для работы с реляционной СУБД.
Ты хочешь абстрагироваться от СУБД?
Re[30]: Entity Framework за! и против!
От: Ночной Смотрящий Россия  
Дата: 09.07.14 11:52
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

AP>Ты хочешь абстрагироваться от СУБД?


Я хочу сказать, что с точки зрения клиентской библиотеки этот код статический. По определению — потому что текст запроса не зависит от значений, вычисляемых в рантайме. Все строго, в математическом смысле формально.
Re[31]: Entity Framework за! и против!
От: Alexander Polyakov  
Дата: 09.07.14 12:32
Оценка:
Речь идет вот об этом коде:
q = 'select * from orders where 1=1 '
if (@shipDateFrom is not null)
  q = q + 'AND where ShippedDate >= @shipDateFrom '
if (@shipDateTo is null)
  q = q + 'AND ShippedDate <= @shipDateTo '
exec(q, @shipDateFrom, @shipDateTo);


НС>... потому что текст запроса не зависит от значений, вычисляемых в рантайме. Все строго, в математическом смысле формально.

Как же не зависит, значение shipDateFrom получается из того, что пользователь ввел в поле ввода. Если пользователь ничего не ввел, то shipDateFrom равно null.
Если пользователь ничего не ввел, текст запроса такой:
select * from orders where 1=1

Если пользователь ввел какую-либо дату, то текст запроса такой:
select * from orders where 1=1 AND where ShippedDate >= @shipDateFrom

Аналогично для параметра shipDateTo. В итоге получаются четыре разных текста запросов в зависимости от рантайм параметров. Все строго, в математическом смысле формально.
Re[32]: Entity Framework за! и против!
От: Ночной Смотрящий Россия  
Дата: 09.07.14 14:02
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

AP>Как же не зависит


Вот так — этот запрос на стороне клиента — текстовая константа.
Re[26]: Entity Framework за! и против!
От: IT Россия linq2db.com
Дата: 09.07.14 14:13
Оценка:
Здравствуйте, Alexander Polyakov, Вы писали:

IT>>А по твоей ссылке где пример устранения проблемы динамического SQL?

AP>Листинг 1.1:

Ага, и как ты решил проблему верификации такого SQL?
Если нам не помогут, то мы тоже никого не пощадим.
Re[27]: Entity Framework за! и против!
От: Alexander Polyakov  
Дата: 09.07.14 14:58
Оценка: :)
IT>Ага, и как ты решил проблему верификации такого SQL?
Последовательно описано в разделах 2, 3, 4, 5. И далее в разделах 7, 8 и 9.1.
Re[33]: Entity Framework за! и против!
От: Alexander Polyakov  
Дата: 09.07.14 15:10
Оценка:
НС>Вот так — этот запрос на стороне клиента — текстовая константа.
Sinclair же написал
Автор: Sinclair
Дата: 01.07.14
, что неважно, где идет склейка текста.
Или, по-твоему, вот в этом коде запрос на стороне клиента — текстовая константа?
void Example1(DateTime? shipDateFrom, DateTime? shipDateTo)
{
    using (var connection = new SqlConnection(ConnectionString))
    {
        connection.Open();
        using (var command = connection.CreateCommand())
        {
            var builder = new StringBuilder("select * from orders where 1=1 ");
            if (shipDateFrom != null)
            {
                builder.Append("AND where ShippedDate >= @shipDateFrom ");
                command.Parameters.AddWithValue("@shipDateFrom", shipDateFrom);
            }
            if (shipDateTo != null)
            {
                builder.Append("AND ShippedDate <= @shipDateTo ");
                command.Parameters.AddWithValue("@shipDateTo", shipDateTo);
            }
            command.CommandText = builder.ToString();
            using (var reader = command.ExecuteReader())
            {
                //...
            }
        }
    }
}
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.