powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Покритикуйте EF code-first
25 сообщений из 245, страница 8 из 10
Покритикуйте EF code-first
    #38981428
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну блин! Начал писать миграции руками - а там всё на захардкоденных строках! Ну и кой смысл тужиться во Fluent API с лямбдами и дженериками для выбора типа и его свойств, когда в миграциях всё это прахом идёт. Тут либо во всём проекте нет захардкоденных строк, либо во всём проекте только их и применять - чтобы не запутаться, где что, и не загромождать класс контекста этим многословным флюэнтом.


Вот, например, пример миграции из статьи

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
{ 
    using System; 
    using System.Data.Entity.Migrations; 
     
    public partial class AddUrl : DbMigration 
    { 
        public override void Up() 
        { 
            AddColumn("dbo.Blogs", "Url", c => c.String()); 
        } 
         
        public override void Down() 
        { 
            DropColumn("dbo.Blogs", "Url"); 
        } 
    } 
}



Имя сущности включает в себя название схемы данных - dbo. Можно без неё обойтись или нельзя? Я могу через выражения и лямбды получить строковое имя сущности - написал расширяющий метод для этого. Но как получить строку схемы данных при этом ещё, и чтобы точкой было разделено? Т. е. как вот это "dbo.Blogs" получить?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38981443
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там в XML-комментах к DropColumn написано, что имя схемы данных опционально и по умолчанию подразумевается "dbo", но я для справки спрашиваю - как получить вот такую строку "dbo.Blogs" без нагромождений самописных расширений с выражениями и рефлексией?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38981481
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Имя сущности включает в себя название схемы данных - dbo. Можно без неё обойтись или нельзя?

Можно. Пиши свои соглашения. Миграции не надо писать руками, кроме некоторых исключительных случаев. Они генерятся. Про соглашения сколько раз ещё повторить? ))
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38981561
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttAlexey2112Имя сущности включает в себя название схемы данных - dbo. Можно без неё обойтись или нельзя?

Можно. Пиши свои соглашения. Миграции не надо писать руками, кроме некоторых исключительных случаев. Они генерятся. Про соглашения сколько раз ещё повторить? ))
Про свои соглашения забыл помню. )))

А автомиграции в примерах только для простых свойств почему-то применяют. А у меня в свойствах - массивы с разными типами данных, которые сериализуются в строки (nvarchar(max)) и обратно вот так .
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38981773
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112А автомиграции в примерах только для простых свойств почему-то применяют

Ну а в БД какие поля лежат, не простые чтоли? ))

Alexey2112А у меня в свойствах - массивы с разными типами данных, которые сериализуются в строки (nvarchar(max)) и обратно вот так .

При чём тут сериализация и отражение полей таблиц в поля экземпляра класса?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982214
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМиграции не надо писать руками, кроме некоторых исключительных случаев.
Правильно будет так: миграции можно не писать руками только в самых тривиальных случаях, а именно -- для добавления объектов. В остальных случаях -- только руками.

А когда миграциями заведует ORM -- это неправильно.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982281
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttAlexey2112А автомиграции в примерах только для простых свойств почему-то применяют

Ну а в БД какие поля лежат, не простые чтоли? ))

Alexey2112А у меня в свойствах - массивы с разными типами данных, которые сериализуются в строки (nvarchar(max)) и обратно вот так .

При чём тут сериализация и отражение полей таблиц в поля экземпляра класса?
Ладно, для такого вот "отражения" ты используешь ручные или автомиграции?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982289
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучА когда миграциями заведует ORM -- это неправильно.

ORM не заведует миграциями, если только не включены автомиграции, что непозволительно, конечно, для крупных проектов.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982290
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Ладно, для такого вот "отражения" ты используешь ручные или автомиграции?

Я автомиграции вообще не использую
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982341
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttAlexey2112Ладно, для такого вот "отражения" ты используешь ручные или автомиграции?

Я автомиграции вообще не использую
Т. е. ты не используешь это

hVosttМиграции не надо писать руками, кроме некоторых исключительных случаев. Они генерятся.
??

Или я не понимаю, о чём речь. У меня что-то не генерятся.

Я делал всё по этому учебнику. Т. е. создал БД в коде, запульнул её в БД. Потом добавил миграции. Мне создался скрипт миграций на шарпе, который создаёт эту БД. Потом я добавил таблицу InputData с такими вот "отражёнными" полями и связь 1-1 между этой новой таблицей и уже существующей. Написал в консоли "Add-Migration AddInputDataTable" - мне создался класс миграции с абсолютно пустыми методами Up и Down. А где код? Я что, должен руками всё заполнять? Мне обещали, что всё автоматом заполнится. Вот я и спрашиваю, где мои миграции и почему я их должен писать руками?

А, у меня стоит

AutomaticMigrationsEnabled = false;

Если я сделаю тру, то это сделает мне заполнение кода для методов Up и Down автоматически, или автомиграции это нечно другое, а не заполнялка кода?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982537
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Или я не понимаю, о чём речь. У меня что-то не генерятся.

Генерится код миграции с помощью команды

Add-Migration Migration1

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


Alexey2112А, у меня стоит

AutomaticMigrationsEnabled = false;

Автомиграции отключены, ну ))


Alexey2112Если я сделаю тру, то это сделает мне заполнение кода для методов Up и Down автоматически, или автомиграции это нечно другое, а не заполнялка кода?

Есть автомиграции, есть ручные миграции. При ручных миграциях код генерится, но ты его можешь исправить, или полностью переписать даже.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982628
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttAlexey2112Или я не понимаю, о чём речь. У меня что-то не генерятся.

Генерится код миграции с помощью команды

Add-Migration Migration1

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

Я так и сделал, а методы оказались пустыми:

Alexey2112Потом я добавил таблицу InputData с такими вот "отражёнными" полями и связь 1-1 между этой новой таблицей и уже существующей. Написал в консоли "Add-Migration AddInputDataTable" - мне создался класс миграции с абсолютно пустыми методами Up и Down. А где код? Я что, должен руками всё заполнять? Мне обещали, что всё автоматом заполнится. Вот я и спрашиваю, где мои миграции и почему я их должен писать руками?

Миграции не смогли подхватить мои изменения?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982649
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Я так и сделал, а методы оказались пустыми:

Надо либо добавить класс InputData в своего наследника DbContext, либо создать и зарегистрировать конфигурацию класса в своём DbContext-е, можно это сделать либо ручками, либо просканировать сборку(и) на предмет конфигураций.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982654
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Миграции не смогли подхватить мои изменения?

Как ты "добавил таблицу"? Стопудово не добавил поле в свой DbContext
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982786
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueAlexey2112Миграции не смогли подхватить мои изменения?

Как ты "добавил таблицу"? Стопудово не добавил поле в свой DbContext
Ага! )))

Что-то сильно много в голове держать надо. Чтобы добавить таблицу со связями, надо:

1) добавить класс таблицы;
2) добавить в эту новую таблицу в и связанные таблицы свойства навигации и ключи;
3) добавить свойство типа DbSet<МояНоваяТаблица> в контекст;
4) если требуется, в OnModelCreating контекста добавить ручные настройки на Fluent API;
5) если требуется, добавить ручные миграции.

Ничего не забыл?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982815
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил DbSet и получил почти то же, что я и сам написал. Отличия в том, что мне сгенерилось вот что

Код: c#
1.
2.
RawData = c.Binary(),
Values_Internal = c.String(),



по такой модели

Код: c#
1.
2.
public byte[] RawData { get; set; }
public string Values_Internal { get; set; }



Почему? Я-то сам написал вот такую миграцию

Код: c#
1.
2.
RawData = c.Binary(nullable: true),
Values_Internal = c.String(nullable: true),



Почему на наллабл-тип мне не сгенерилась миграция с наллабл констрейнтом? Ведь соглашения же говорят, что наллабл в C# будет и наллабл в БД?



Пришлось ручками дописать. Короче, все эти автозаполнения методов Up и Down только для того, чтобы много кода ручками не писать. Весь этот автосгенеренный код всё равно надо пробежать и поправить то тут, то там что-нибудь. Правильно я понимаю?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982832
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Почему на наллабл-тип мне не сгенерилась миграция с наллабл констрейнтом?

c.String() разве не аналогично c.String(nullable: true) ?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982833
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Пришлось ручками дописать. Короче, все эти автозаполнения методов Up и Down только для того, чтобы много кода ручками не писать. Весь этот автосгенеренный код всё равно надо пробежать и поправить то тут, то там что-нибудь. Правильно я понимаю?

Это на твоё усмотрение. У меня всё норм получается.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982921
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

кажется, я не так понял эту штуку. Nullable в БД задаётся атрибутом Required в моделях БД в .NET (или его отсутствием). Т. е. это не то же понятие, что и nullable в .NET.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982925
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что у меня есть другое свойство в другой модели

[Required]
public string Name { get; set; }

автосгенеренная миграция для неё получилась такая

Name = c.String(nullable: false),

а в БД это выглядит так

Name
nvarchar(MAX)
allow nulls:нет галочки
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982933
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А подскажите, что сделать, чтобы вернуть в проект первую миграцию, которая БД создаёт? А то я начал руками файлы миграций из менеджера решений удалять, а потом снова пытаюсь создать миграции, а они с пустыми методами Up и Down создаются. Такое ощущение, что эти миграции где-то ещё хранятся и им мои удаления из менеджера решений не указ - в консоли пишется, что эти миграции надо сначала откатить, а потом пересоздать. А я их удалил - нечего откатывать.

Или проще новый проект создать, перекопировав все файлы со старого? )))
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982976
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112,

Информация о миграциях записывается в базу данных, найди там табличку, где хранятся миграции и грохни её.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38982990
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttAlexey2112,

Информация о миграциях записывается в базу данных, найди там табличку, где хранятся миграции и грохни её.
Спасибо.

Так я прав насчёт этого ?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38983145
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112,

ну типа того. только можно переопределить соглашения, и обрабатывать другие атрибуты, кроме Required. в базе данных поле обозначается либо NULL, либо NOT NULL.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38984653
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдааа... А изкоробочные миграции-то не парятся по поводу захардкоденных строк и не юзают рефлексию, выражения и прочие лишние извращения. И вообще, CF как будто заточен на захардкоденные строки. Чтобы всё было по-моему, там надо всё переписать - соглашения, атрибуты, миграции и ещё много страшных слов - всё руками своими переделать... Да ну его на. У меня тоже будут захардкоденные строки. )))
...
Рейтинг: 0 / 0
25 сообщений из 245, страница 8 из 10
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Покритикуйте EF code-first
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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