powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF Core Migration update новой колонки
18 сообщений из 18, страница 1 из 1
EF Core Migration update новой колонки
    #39672200
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Такая задача - добавляется в миграции новая колонка, и хочу ее как-то проапдейтить, но пишет что
Код: html
1.
Недопустимое имя столбца "Age2".


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  migrationBuilder.AddColumn<int>(
                name: "Age2",
                table: "Users9",
                nullable: false,
                defaultValue: 0);

            ApplicationContext db = new ApplicationContext();

            var command = db.Database.GetDbConnection().CreateCommand();

            command.CommandText = string.Format("update users9 set Age2 = {0}", 199);
            db.Database.OpenConnection();

            command.ExecuteNonQuery();



при всем при том, если добавлять новую таблицу и по такой же методе пытаться вставлять в нее новые записи - то работает. Как сделать?
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672286
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,


Дядя Коля
Код: c#
1.
command.CommandText = string.Format("update users9 set \"Age2\" = {0}", 199);
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672340
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,

Код: c#
1.
2.
3.
4.
5.
6.
7.
  migrationBuilder.AddColumn<int>(
                name: "Age2",
                table: "Users9",
                nullable: false,
                defaultValue: 0);

  migrationBuilder.Sql($"update users9 set Age2 = {199}");


Я не смотрел, но, вероятно, migrationBuilder (потому и билдер ) не выполняет действия немедленно, а складывает их в очередь, поэтому когда ты пытаешься выполнить запрос на коннекшене, это поле в таблице еще не существует.
Так или иначе, надо не левый огород городить, а использовать предназначенные для этого средства
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672341
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proне выполняет действия немедленно, а складывает их в очередьхотя, если ты говоришь Дядя Коляи по такой же методе пытаться вставлять в нее новые записи - то работает,то, видимо, я не прав



hVostt, экранирование имени поля - это для совместимости со всеми СУБД, в каких-то экранировать требуется, даже если поле имеет название без наворотов?
В любом случае странно тогда, что у ТС работал инсерт, там-то наверное тоже надо поля в кавычках перечислять?
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672363
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProhVostt, экранирование имени поля - это для совместимости со всеми СУБД, в каких-то экранировать требуется, даже если поле имеет название без наворотов?
В любом случае странно тогда, что у ТС работал инсерт, там-то наверное тоже надо поля в кавычках перечислять?

Если взять провайдер Postgres для EF, то все наименования полей будут экранированными, и по-другому работать с ними нельзя, если только не написать свои соглашения.
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672364
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProВ любом случае странно тогда, что у ТС работал инсерт, там-то наверное тоже надо поля в кавычках перечислять?

Ну тут фиг его знает, так и приходится, ванговать
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672501
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДядя Коля,


Дядя Коля
Код: c#
1.
command.CommandText = string.Format("update users9 set \"Age2\" = {0}", 199);


не помогло, это ms sql
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672504
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProhVostt, экранирование имени поля - это для совместимости со всеми СУБД, в каких-то экранировать требуется, даже если поле имеет название без наворотов?
В любом случае странно тогда, что у ТС работал инсерт, там-то наверное тоже надо поля в кавычках перечислять?
MS SQL оба варианта понимает, с кавычками и без, можно еще в квадратных скобках.
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672518
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMS SQL оба варианта понимает, с кавычками и без, можно еще в квадратных скобках.

Желательно всегда кавычить, если используется EF или другая ORM.
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672519
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля
Код: c#
1.
command.CommandText = string.Format("update \"Users9\" set \"Age2\" = {0}", 199);
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672533
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коляне помогло, это ms sqlмой вариант помог?
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672603
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДядя Коляне помогло, это ms sqlмой вариант помог?
кавычки Age2? нет
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672613
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,
Думаю он тебя просит доку или ссылку, что у тебя обрывок кода должен вообще работать.
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672666
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
   protected override void Up(MigrationBuilder migrationBuilder)
        {
            BeforeDelTables();

            migrationBuilder.DropTable(
                name: "Users8");

            migrationBuilder.CreateTable(
                name: "Users9",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                    Name = table.Column<string>(nullable: true),
                    Age = table.Column<int>(nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Users9", x => x.Id);
                });

            AfterAddTables(migrationBuilder);
        }

 void BeforeDelTables()
        {
            ApplicationContext db = new ApplicationContext();

            var command = db.Database.GetDbConnection().CreateCommand();

            command.CommandText = "SELECT * From users8";
            db.Database.OpenConnection();

            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    us9 u9 = new us9();

                    u9.Name = reader["Name"].ToString();
                    u9.Age = (int)reader["Age"];

                    _users9.Add(u9);
                }
            }

        }

        void AfterAddTables(MigrationBuilder migrationBuilder)
        {
            foreach (var u9 in _users9)
                migrationBuilder.Sql(string.Format(@"insert into dbo.users9 (Name, Age) values ('{0}', {1})", u9.Name, u9.Age));
            
        }
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672718
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя КоляShocker.Proпропущено...
мой вариант помог?
кавычки Age2? неткавычки предлагал hVostt

я предлагал использовать как положено migrationBuilder.Sql() , а не трахаться с левыми коннекшенами и ридерами
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672858
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proя предлагал использовать как положено migrationBuilder.Sql() , а не трахаться с левыми коннекшенами и ридерами

Это само собой разумеется, вообще не понял зачем там коннекшены и ридеры.
Как при наличии ложки черпать суп ладошкой.
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672865
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я полагаю, что дело тут не в удобстве (ложка), а это и есть причина ошибки, а не кавычки (так как у ТС мссиквел)

ТС при наличии незакрытой транзакции на добавление столбца пытается открыть новую, чтобы обновить этот столбец. Но вопрос, почему ТС утверждает, что у него работает при тех же условиях инсерт в новую таблу
...
Рейтинг: 0 / 0
EF Core Migration update новой колонки
    #39672872
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Да, миграции выполняются в своей транзакции.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF Core Migration update новой колонки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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