|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Ну блин! Начал писать миграции руками - а там всё на захардкоденных строках! Ну и кой смысл тужиться во Fluent API с лямбдами и дженериками для выбора типа и его свойств, когда в миграциях всё это прахом идёт. Тут либо во всём проекте нет захардкоденных строк, либо во всём проекте только их и применять - чтобы не запутаться, где что, и не загромождать класс контекста этим многословным флюэнтом. Вот, например, пример миграции из статьи Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Имя сущности включает в себя название схемы данных - dbo. Можно без неё обойтись или нельзя? Я могу через выражения и лямбды получить строковое имя сущности - написал расширяющий метод для этого. Но как получить строку схемы данных при этом ещё, и чтобы точкой было разделено? Т. е. как вот это "dbo.Blogs" получить? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2015, 17:23 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Там в XML-комментах к DropColumn написано, что имя схемы данных опционально и по умолчанию подразумевается "dbo", но я для справки спрашиваю - как получить вот такую строку "dbo.Blogs" без нагромождений самописных расширений с выражениями и рефлексией? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2015, 17:33 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Имя сущности включает в себя название схемы данных - dbo. Можно без неё обойтись или нельзя? Можно. Пиши свои соглашения. Миграции не надо писать руками, кроме некоторых исключительных случаев. Они генерятся. Про соглашения сколько раз ещё повторить? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2015, 18:04 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttAlexey2112Имя сущности включает в себя название схемы данных - dbo. Можно без неё обойтись или нельзя? Можно. Пиши свои соглашения. Миграции не надо писать руками, кроме некоторых исключительных случаев. Они генерятся. Про соглашения сколько раз ещё повторить? )) Про свои соглашения забыл помню. ))) А автомиграции в примерах только для простых свойств почему-то применяют. А у меня в свойствах - массивы с разными типами данных, которые сериализуются в строки (nvarchar(max)) и обратно вот так . ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2015, 19:17 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112А автомиграции в примерах только для простых свойств почему-то применяют Ну а в БД какие поля лежат, не простые чтоли? )) Alexey2112А у меня в свойствах - массивы с разными типами данных, которые сериализуются в строки (nvarchar(max)) и обратно вот так . При чём тут сериализация и отражение полей таблиц в поля экземпляра класса? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 07:21 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttМиграции не надо писать руками, кроме некоторых исключительных случаев. Правильно будет так: миграции можно не писать руками только в самых тривиальных случаях, а именно -- для добавления объектов. В остальных случаях -- только руками. А когда миграциями заведует ORM -- это неправильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 13:31 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttAlexey2112А автомиграции в примерах только для простых свойств почему-то применяют Ну а в БД какие поля лежат, не простые чтоли? )) Alexey2112А у меня в свойствах - массивы с разными типами данных, которые сериализуются в строки (nvarchar(max)) и обратно вот так . При чём тут сериализация и отражение полей таблиц в поля экземпляра класса? Ладно, для такого вот "отражения" ты используешь ручные или автомиграции? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 14:20 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
НахлобучА когда миграциями заведует ORM -- это неправильно. ORM не заведует миграциями, если только не включены автомиграции, что непозволительно, конечно, для крупных проектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 14:22 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Ладно, для такого вот "отражения" ты используешь ручные или автомиграции? Я автомиграции вообще не использую ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 14:23 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttAlexey2112Ладно, для такого вот "отражения" ты используешь ручные или автомиграции? Я автомиграции вообще не использую Т. е. ты не используешь это hVosttМиграции не надо писать руками, кроме некоторых исключительных случаев. Они генерятся. ?? Или я не понимаю, о чём речь. У меня что-то не генерятся. Я делал всё по этому учебнику. Т. е. создал БД в коде, запульнул её в БД. Потом добавил миграции. Мне создался скрипт миграций на шарпе, который создаёт эту БД. Потом я добавил таблицу InputData с такими вот "отражёнными" полями и связь 1-1 между этой новой таблицей и уже существующей. Написал в консоли "Add-Migration AddInputDataTable" - мне создался класс миграции с абсолютно пустыми методами Up и Down. А где код? Я что, должен руками всё заполнять? Мне обещали, что всё автоматом заполнится. Вот я и спрашиваю, где мои миграции и почему я их должен писать руками? А, у меня стоит AutomaticMigrationsEnabled = false; Если я сделаю тру, то это сделает мне заполнение кода для методов Up и Down автоматически, или автомиграции это нечно другое, а не заполнялка кода? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 14:55 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Или я не понимаю, о чём речь. У меня что-то не генерятся. Генерится код миграции с помощью команды Add-Migration Migration1 который можно поправить или дополнить. Автомиграции, это когда миграции выполняются полностью без твоего участия и, соответственно, контроля. Alexey2112А, у меня стоит AutomaticMigrationsEnabled = false; Автомиграции отключены, ну )) Alexey2112Если я сделаю тру, то это сделает мне заполнение кода для методов Up и Down автоматически, или автомиграции это нечно другое, а не заполнялка кода? Есть автомиграции, есть ручные миграции. При ручных миграциях код генерится, но ты его можешь исправить, или полностью переписать даже. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 17:00 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttAlexey2112Или я не понимаю, о чём речь. У меня что-то не генерятся. Генерится код миграции с помощью команды Add-Migration Migration1 который можно поправить или дополнить. Автомиграции, это когда миграции выполняются полностью без твоего участия и, соответственно, контроля. Я так и сделал, а методы оказались пустыми: Alexey2112Потом я добавил таблицу InputData с такими вот "отражёнными" полями и связь 1-1 между этой новой таблицей и уже существующей. Написал в консоли "Add-Migration AddInputDataTable" - мне создался класс миграции с абсолютно пустыми методами Up и Down. А где код? Я что, должен руками всё заполнять? Мне обещали, что всё автоматом заполнится. Вот я и спрашиваю, где мои миграции и почему я их должен писать руками? Миграции не смогли подхватить мои изменения? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 19:09 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Я так и сделал, а методы оказались пустыми: Надо либо добавить класс InputData в своего наследника DbContext, либо создать и зарегистрировать конфигурацию класса в своём DbContext-е, можно это сделать либо ручками, либо просканировать сборку(и) на предмет конфигураций. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 20:01 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Миграции не смогли подхватить мои изменения? Как ты "добавил таблицу"? Стопудово не добавил поле в свой DbContext ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2015, 20:10 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
MonochromatiqueAlexey2112Миграции не смогли подхватить мои изменения? Как ты "добавил таблицу"? Стопудово не добавил поле в свой DbContext Ага! ))) Что-то сильно много в голове держать надо. Чтобы добавить таблицу со связями, надо: 1) добавить класс таблицы; 2) добавить в эту новую таблицу в и связанные таблицы свойства навигации и ключи; 3) добавить свойство типа DbSet<МояНоваяТаблица> в контекст; 4) если требуется, в OnModelCreating контекста добавить ручные настройки на Fluent API; 5) если требуется, добавить ручные миграции. Ничего не забыл? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 05:18 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Добавил DbSet и получил почти то же, что я и сам написал. Отличия в том, что мне сгенерилось вот что Код: c# 1. 2.
по такой модели Код: c# 1. 2.
Почему? Я-то сам написал вот такую миграцию Код: c# 1. 2.
Почему на наллабл-тип мне не сгенерилась миграция с наллабл констрейнтом? Ведь соглашения же говорят, что наллабл в C# будет и наллабл в БД? Пришлось ручками дописать. Короче, все эти автозаполнения методов Up и Down только для того, чтобы много кода ручками не писать. Весь этот автосгенеренный код всё равно надо пробежать и поправить то тут, то там что-нибудь. Правильно я понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 09:20 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Почему на наллабл-тип мне не сгенерилась миграция с наллабл констрейнтом? c.String() разве не аналогично c.String(nullable: true) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 10:30 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112Пришлось ручками дописать. Короче, все эти автозаполнения методов Up и Down только для того, чтобы много кода ручками не писать. Весь этот автосгенеренный код всё равно надо пробежать и поправить то тут, то там что-нибудь. Правильно я понимаю? Это на твоё усмотрение. У меня всё норм получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 10:31 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVostt, кажется, я не так понял эту штуку. Nullable в БД задаётся атрибутом Required в моделях БД в .NET (или его отсутствием). Т. е. это не то же понятие, что и nullable в .NET. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 13:29 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Потому что у меня есть другое свойство в другой модели [Required] public string Name { get; set; } автосгенеренная миграция для неё получилась такая Name = c.String(nullable: false), а в БД это выглядит так Name nvarchar(MAX) allow nulls:нет галочки ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 13:32 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
А подскажите, что сделать, чтобы вернуть в проект первую миграцию, которая БД создаёт? А то я начал руками файлы миграций из менеджера решений удалять, а потом снова пытаюсь создать миграции, а они с пустыми методами Up и Down создаются. Такое ощущение, что эти миграции где-то ещё хранятся и им мои удаления из менеджера решений не указ - в консоли пишется, что эти миграции надо сначала откатить, а потом пересоздать. А я их удалил - нечего откатывать. Или проще новый проект создать, перекопировав все файлы со старого? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 14:07 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112, Информация о миграциях записывается в базу данных, найди там табличку, где хранятся миграции и грохни её. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 15:45 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
hVosttAlexey2112, Информация о миграциях записывается в базу данных, найди там табличку, где хранятся миграции и грохни её. Спасибо. Так я прав насчёт этого ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 16:01 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Alexey2112, ну типа того. только можно переопределить соглашения, и обрабатывать другие атрибуты, кроме Required. в базе данных поле обозначается либо NULL, либо NOT NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2015, 23:48 |
|
Покритикуйте EF code-first
|
|||
---|---|---|---|
#18+
Мдааа... А изкоробочные миграции-то не парятся по поводу захардкоденных строк и не юзают рефлексию, выражения и прочие лишние извращения. И вообще, CF как будто заточен на захардкоденные строки. Чтобы всё было по-моему, там надо всё переписать - соглашения, атрибуты, миграции и ещё много страшных слов - всё руками своими переделать... Да ну его на. У меня тоже будут захардкоденные строки. ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2015, 12:44 |
|
|
start [/forum/topic.php?fid=17&startmsg=38981428&tid=1349537]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
143ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 262ms |
0 / 0 |