|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
А то почитал на SO и вообще - чем дальше по времени его, code-first, появления, тем меньше критики и больше противных сладострастных восхвалений. А вот МСУ против и даже в джаву подался в том числе и из-за этого! Какие проблемы есть у CF на сегодняшний день? Или даже так. Вот появился CF в EF 4, что там изменялось за это время? Есть смысл старые версии EF использовать (у новых же, вроде, всякие требования к версиям СУБД, винды, фрейморвка и Студии, нет?) или в них CF совсем уж плохой и незрелый? Просто я тут новую БД буду делать и решил попробовать "новую" технологию. При этом буду довольно часто менять схему БД - ну, столбцы там в табличке добавлять-убирать - т. к. тема предметной области пока неясная и всё будет устаканиваться по ходу дела. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 12:13 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Например, вот сообщение http://stackoverflow.com/a/12614004 Человек пишет авторnot allow you to specify what I consider very basic and common database configuration information. For example table indexes, security metadata, or have a primary key containing more than one column. Потом ему отвечают авторYou can define composite keys using code first Потом авторFor future readers, this is no longer the case, you can add Indexes, multi-column primary keys, and this kind of things in EF Code First Т. е. такое ощущение, что сначала CF был с ограничениями, покрывающими не все кейсы создания БД, по сравнению с моделированием в визуальном редакторе или с SQL, а потом стал лучше. Так вот, с какой версии EF этот CF стал достаточно развитым, чтобы не натыкаться на ограничения через раз? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 12:37 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Интересное чтиво. Как анекдот почти http://yandex.ru/search/?text=code first мсу site:sql.ru/forum&lr=65 Товарищь уже дымится http://www.sql.ru/forum/896472/ef-code-first-ne-soedinyaetsya-s-bd Сразу видно, что уже тогда он понимал, что за джавой будущее, а шарп - приходящее. Тоже интересная тема http://www.sql.ru/forum/1135322/muzhiki-podumali ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2015, 14:25 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Уже можно покритиковать - в атрибутах требуются захардкоденные строками имена сущностей для FK. Как избежать? - Fluent API. Но это же так многословно, этот АПИ - вместо коротких и понятных атрибутов. Например, связь 1-1..0 на атрибутах: Код: c# 1.
а на fluent API: Код: c# 1. 2. 3. 4. 5. 6. 7.
Боремся с языком... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 17:36 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Не, я понимаю, что fluent API крут, но что, предлагается всё-всё кастомное запихнуть в один метод OnModelCreating, который грозится разрастись до тысяч строк? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 14:28 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Не, я понимаю, что fluent API крут, но что, предлагается всё-всё кастомное запихнуть в один метод OnModelCreating, который грозится разрастись до тысяч строк? Используй соглашения, надо избегать прямой конфигурации всеми силами. У меня обычно получается избегать почти полностью, и проблем не знаю, ни с миграциями, ни с рефакторингом, ни с переездами. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2015, 15:50 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Т. е. такое ощущение, что сначала CF был с ограничениями, покрывающими не все кейсы создания БД, по сравнению с моделированием в визуальном редакторе или с SQL, а потом стал лучше. Так вот, с какой версии EF этот CF стал достаточно развитым, чтобы не натыкаться на ограничения через раз? С поисками серебряной пилюли и священного Грааля, покрывающего абсолютно все мыслимые и немыслимые кейсы и возможности применения, это не к области инженерии, а куда-нибудь к мистикам или любителям поп... потрепаться и почесать языком попусту. Со своими весьма конкретными задачами CF справляется с лихвой. Если хочется пиджак с переподвиподвертом, это не к CF, пиши свой расовый фреймворк для своих подвыподвертов, никто же не запрещает? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2015, 15:59 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttAlexey2112Т. е. такое ощущение, что сначала CF был с ограничениями, покрывающими не все кейсы создания БД, по сравнению с моделированием в визуальном редакторе или с SQL, а потом стал лучше. Так вот, с какой версии EF этот CF стал достаточно развитым, чтобы не натыкаться на ограничения через раз? С поисками серебряной пилюли и священного Грааля, покрывающего абсолютно все мыслимые и немыслимые кейсы и возможности применения, это не к области инженерии, а куда-нибудь к мистикам или любителям поп... потрепаться и почесать языком попусту. Со своими весьма конкретными задачами CF справляется с лихвой. Если хочется пиджак с переподвиподвертом, это не к CF, пиши свой расовый фреймворк для своих подвыподвертов, никто же не запрещает? Я критикую EF не потому, что я обижен на весь мир и вообще красноглазый ненавистник виндов , а потому, что надеюсь встретить встречный комментарий, опровергающий мои "наезды". Наверное, лучше не наездами, а более конкретными вопросами. Но наездами "прикольнее" и веселее. ))) hVosttAlexey2112Не, я понимаю, что fluent API крут, но что, предлагается всё-всё кастомное запихнуть в один метод OnModelCreating, который грозится разрастись до тысяч строк? Используй соглашения, надо избегать прямой конфигурации всеми силами. У меня обычно получается избегать почти полностью , и проблем не знаю, ни с миграциями, ни с рефакторингом, ни с переездами. Простой пример - отношение one-to-one (ну, пусть будет one-to-one or zero). Конвенций - нет. Атрибуты - захардкоденные строки с именами свойств. Выход? - Fluent API . Ты знаешь вариант лучше? Т. е. без многословности Fluent API, без закардкоденных строк, желательно соглашениями или удобными атрибутами. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 07:39 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Простой пример - отношение one-to-one (ну, пусть будет one-to-one or zero). Конвенций - нет. Атрибуты - захардкоденные строки с именами свойств. Выход? - Fluent API . Атрибутами это можно сделать. Соглашениями это можно сделать. Захардкоженные строки в атрибутах? Ну а как ты ещё имена проперти передашь, с этими претензиями уже к разработчикам C#/.NET, чего это они такие сякие, не разрешили нам экспрешены прямо в атрибутах? Ууух, нехорошие. Приходится обходится мерзкими хоббитцами строками. Если тебе понадобилось что-то совсем хитрое, но хочется без блюента, то кастомые атрибуты, кастомные соглашения. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 08:08 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Я критикую EF не потому, что я обижен на весь мир и вообще красноглазый ненавистник виндов , а потому, что надеюсь встретить встречный комментарий, опровергающий мои "наезды". Наверное, лучше не наездами, а более конкретными вопросами. Но наездами "прикольнее" и веселее. ))) Ну дак ты давай уместную критику. Думаешь EF не за что покритиковать? Ещё как есть. Но твои "наезды", пока критикой назвать нельзя. "Мне не нравится флюент" "Мне не нравятся строки" ... Это не критика, бро )) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 08:10 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttAlexey2112Простой пример - отношение one-to-one (ну, пусть будет one-to-one or zero). Конвенций - нет. Атрибуты - захардкоденные строки с именами свойств. Выход? - Fluent API . Атрибутами это можно сделать. Соглашениями это можно сделать. Как? Покажи, пожалуйста. Я имею ввиду соглашениями. Атрибутами я и сам выше показал, как. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 08:14 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Как? Покажи, пожалуйста. Я имею ввиду соглашениями. Атрибутами я и сам выше показал, как. Соглашение + атрибут, извиняюсь что не уточнил сразу. Суть в том, что ты можешь определить какой-нибудь свой универсальный атрибут, без указание свойства с помощью строки, а в соглашении поймать его и обработать. Вот пример кастомного атрибута: https://msdn.microsoft.com/en-us/data/jj819164#attributes Писать код конкретного примера не буду, но думаю ты легко сам догадаешься, как сделать свой атрибут типа [OneToOneRelation]. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 11:09 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttAlexey2112Как? Покажи, пожалуйста. Я имею ввиду соглашениями. Атрибутами я и сам выше показал, как. Соглашение + атрибут, извиняюсь что не уточнил сразу. Суть в том, что ты можешь определить какой-нибудь свой универсальный атрибут, без указание свойства с помощью строки, а в соглашении поймать его и обработать. Вот пример кастомного атрибута: https://msdn.microsoft.com/en-us/data/jj819164#attributes Писать код конкретного примера не буду, но думаю ты легко сам догадаешься, как сделать свой атрибут типа [OneToOneRelation]. ОК, возможно, можно передать в кастомный атрибут параметр типа bool IsOneToOne. Ну, переписать логику маппинга, ладно. Извернувшись, допустим, получится... Но ты-то сам как решаешь эту проблему (one-to-one)? Довольствуешься строками в атрибутах? Всё кастомное пихаешь в OnModelCreating через Fluent API? Ещё что-то? Вот прям щас у меня проблемы нет - мне надо небольшую БД сделать и запихать в OnModelCreating с десяток таких вот 1-1..0 мне не трудно. Но меня интересует, как люди по-взрослому работают - пишут кастомный атрибуты? Может, есть стандартный воркэраунд, который я не знаю? - Меня вот это интересует - не писать кастомное, пока точно не получу информацию, что "из коробки так сделать нельзя" . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 12:12 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112ОК, возможно, можно передать в кастомный атрибут параметр типа bool IsOneToOne. Ну, переписать логику маппинга, ладно. Извернувшись, допустим, получится... Но ты-то сам как решаешь эту проблему (one-to-one)? Довольствуешься строками в атрибутах? Всё кастомное пихаешь в OnModelCreating через Fluent API? Ещё что-то? Что можно, я решаю стандартными способами, для таких случаев атрибуты со строковыми значениями, которые меня ничуть не пугают и к проблемам не приводило, так как изменения модели довольно редки, к этим изменениям повышенное внимание, не понимаю в чём проблема со строковыми атрибутами? Может ты вообще строками не пользуешься? Да, я люблю типизацию, но всему своё место. Прямых конфигураций избегаю, как конфигураций-классов, так и события в DbContext. Всё решалось пока. Alexey2112Вот прям щас у меня проблемы нет - мне надо небольшую БД сделать и запихать в OnModelCreating с десяток таких вот 1-1..0 мне не трудно. Но меня интересует, как люди по-взрослому работают - пишут кастомный атрибуты? Может, есть стандартный воркэраунд, который я не знаю? - Меня вот это интересует - не писать кастомное, пока точно не получу информацию, что "из коробки так сделать нельзя" . Ещё раз говорю, прямые конфигурации -- небольшое, но мелкопакостное зло. Мне удаётся всё покрыть соглашениями, по большей части стандартными, и кастомными, где нехватает. Я не пишу на каждую таблицу OnModelCreating. Если создаётся прецендент, расширяется модель соглашений, даже если она будет использоваться только для одной таблицы, пока. А из коробки много чего нельзя делать, но можно приравнять. Тыжпрограммист, или где? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 14:06 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112для связи 1-1 есть ещё вариант через complex type, но там лимитации экзистируются. Честно говоря 1-1 это чаще фейл, чем вин. Должны быть достаточные основания, чтобы впендюривать 1-1, например, для повышения производительности выборок и некоторых запросов. Зачем их навешивать вдоль и поперёк только потому, что так можно? Тем более через модель наследования 1-1 получаются вообще нативно. Давай лучше рассмотрим конкретный пример из конкретной предметной области? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 14:08 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttAlexey2112для связи 1-1 есть ещё вариант через complex type, но там лимитации экзистируются. Честно говоря 1-1 это чаще фейл, чем вин. Должны быть достаточные основания, чтобы впендюривать 1-1, например, для повышения производительности выборок и некоторых запросов. Зачем их навешивать вдоль и поперёк только потому, что так можно? Тем более через модель наследования 1-1 получаются вообще нативно. Давай лучше рассмотрим конкретный пример из конкретной предметной области? Да пример простой - у меня в модели предметной области есть некоторые настройки. Я их расделяю на классы - OneSettings, AnotherSettings and so on. Все эти настройки потом собираются в один класс Settings - банально через композицию (т. е. Settings имеет поля с типами OneSettings, AnotherSettings, etc.). Ну а теперь просто надо создать отображение этого всего на реляционную БД. Ну, если в лоб, то обычно такая иерархия - композиция классов - делается через 1-1..0. Ещё через это же делается отображение наследования классов. Какие ещё варианты? У меня пока в голове такое, что для композиции больше может подойти complext type. Ещё вариант, что любую композицию или наследование запихнуть просто в одну большую таблицу - т. е. тупо свести все свойства из такой иерархии классов в столбцы одной таблицы. Если блобов нет и количество свойств тоже небольшое (а у меня как раз такой вариант), то должно покатить. Как ты считаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 15:02 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
У меня, кстати, была с самого начала мысль упростить - свести все настройки в одну таблицу, а при запросах уже вытаскивать нужные свойства и раздавать их конкретным классам настроек. Соответственно и при сохранении. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 15:04 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112, Если настроек много, и они расширяемые, то наверное следует подумать о другой модели хранения, нормализовать, например, вот так: TABLE Properties (Id, Name, Group, Type) TABLE Values (Id, UserId, PropertyId, Value) Если разброс диапазонов значений большой, от чисел до безразмерного текста, для Values можно сделать иерархию в одной таблице для хранения значений разного типа в разных полях, это в EF сделать легко. Такая модель гораздо гибче и не меняется, если добавляются настройки, от количества настроек таблицы не пухнут, это и сопровождать приятнее. Самый частый кейс, где бы я применял 1:1, это вынос крупных данных (например, блобов) в отдельные таблицы, чтобы они материализовались только по запросу и для возможности вынести их, допустим, в отдельный tablespace. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 02:33 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttЧестно говоря 1-1 это чаще фейл, чем вин. Должны быть достаточные основания, чтобы впендюривать 1-1, например, для повышения производительности выборок и некоторых запросов. Зачем их навешивать вдоль и поперёк только потому, что так можно? Тем более через модель наследования 1-1 получаются вообще нативно. Давай лучше рассмотрим конкретный пример из конкретной предметной области? Тут message: сообщение message_task: сообщение-задача message_comments: сообщение-комментарий Предлагай альтернативу. hVosttAlexey2112, Если настроек много, и они расширяемые, то наверное следует подумать о другой модели хранения, нормализовать, например, вот так: TABLE Properties (Id, Name, Group, Type) TABLE Values (Id, UserId, PropertyId, Value)EAV - зло! Alexey2112Уже можно покритиковать - в атрибутах требуются захардкоденные строками имена сущностей для FK.И какие несчастья нам грозят из-за этого "ужаса"? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 08:41 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Алексей КAlexey2112Уже можно покритиковать - в атрибутах требуются захардкоденные строками имена сущностей для FK.И какие несчастья нам грозят из-за этого "ужаса"? Рефакторинг. Наделал ты сто таблиц, наделал отображений, и тут надо поменять пару названий, которые встречаются 50 раз. Полнотекстовый поиск, вместо контекстного рефакторинга? hVosttЕсли разброс диапазонов значений большой, от чисел до безразмерного текста, для Values можно сделать иерархию в одной таблице для хранения значений разного типа в разных полях, это в EF сделать легко. Так, чтоли? TABLE Values (Id, UserId, PropertyId, ValueInt, ValueDouble, ValueByteArray, ValueBool, ValueString, etc.) Ты только скажи, если я в строке запишу только в одно поле из всех Value..., то другие будут занимать место в БД, или нет? Ещё раз, ребята. Нет какого-то определённого правила, как лучше моделить в БД композицию классов (т. е. когда поля класса могут иметь тип другого класса)? Т. е. нельзя сказать, что композиция - только через EAV, или через 1-1..0, или только через complex types? Каждый раз подбирается по ситуации? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 09:03 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Алексей Кпропущено... И какие несчастья нам грозят из-за этого "ужаса"? Рефакторинг. Наделал ты сто таблиц, наделал отображений, и тут надо поменять пару названий, которые встречаются 50 раз. Полнотекстовый поиск, вместо контекстного рефакторинга?Я за кодогенерацию контекста по БД, пусть даже это DbContext API (code-first). Но если хочется именно code-first + строгая типизация, то да - Fluent. Ничего моструозного в нём нет, благо code-complete присутствует. Alexey2112Ещё раз, ребята. Нет какого-то определённого правила, как лучше моделить в БД композицию классов (т. е. когда поля класса могут иметь тип другого класса)? Т. е. нельзя сказать, что композиция - только через EAV, или через 1-1..0, или только через complex types? Каждый раз подбирается по ситуации?Конечно, всё всегда делается в зависимости от поставленной задачи и предпочтений. Только EAV тут маленько "сбоку", его обычно применяют, когда схема данных неизвестна на этапе разработки. Мне показалось, что здесь не тот случай. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 09:20 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Алексей К Тут message: сообщение message_task: сообщение-задача message_comments: сообщение-комментарий Предлагай альтернативу. На мой взгляд, тупо. Можно воспользоваться наследованием и хранить всё в одной таблице, EF такое предлагает нативно. Или воспользоваться наследованием, если религия не позволяет в одной, хранить в нескольких таблицах. EF предлагает такое нативно. Вопросы? )) Алексей КEAV - зло! Какой-то нелепый наброс. Зло это бездумное, фанатичное, следование какой-то одной идеологии. В данном случае EAV это то, что доктор прописал, так как гибко и не создаёт потенциальных таблиц с овер 100 полями. И не надо мне рассказывать только сказочки и глупые нелепости о том, как некто в компании Х работал там с 10000000000 таблицами с 1000000000 полями. Если ума нет, считай калека. Алексей КИ какие несчастья нам грозят из-за этого "ужаса"? Ну как же, "строки -- зло!" ))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 10:16 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Рефакторинг. Наделал ты сто таблиц, наделал отображений, и тут надо поменять пару названий, которые встречаются 50 раз. Полнотекстовый поиск, вместо контекстного рефакторинга? Даю подсказку. Именованные константы! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 10:17 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Так, чтоли? TABLE Values (Id, UserId, PropertyId, ValueInt, ValueDouble, ValueByteArray, ValueBool, ValueString, etc.) Ты только скажи, если я в строке запишу только в одно поле из всех Value..., то другие будут занимать место в БД, или нет? Нет, они все будут храниться как NULLABLE и места занимать не будут, не волнуйся. Просто не переживай об этом. Alexey2112Ещё раз, ребята. Нет какого-то определённого правила, как лучше моделить в БД композицию классов (т. е. когда поля класса могут иметь тип другого класса)? Т. е. нельзя сказать, что композиция - только через EAV, или через 1-1..0, или только через complex types? Каждый раз подбирается по ситуации? Каждый раз, для каждой отдельной задачи, в зависимости от требований, области применения и способу использования, решения могут в корне друг от друга отличаться. Вплоть даже до смены SQL на noSQL ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 10:19 |
|
|
start [/forum/topic.php?fid=17&fpage=14&tid=1349537]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 224ms |
total: | 380ms |
0 / 0 |