Я пытаюсь заполнить таблицу жанров, но постоянно получаю сообщение об ошибке:
Invalid column name
У меня есть простая модель класса для жанров кино.
public class Genre
{
public int Id { get; set; }
public string Name { get; set; }
}
Класс фильма привязан к жанру следующим образом:
public class Movie
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public Genre Genre { get; set; }
[Required]
public DateTime ReleaseDate { get; set; }
[Required]
public DateTime DateAdded { get; set; }
[Required]
public int NumInStock { get; set; }
}
В своей консоли Nuget я запускаю add-migration, и он сгенерировал для меня пустую таблицу Genre с двумя столбцами, Id и name.
Затем я пытаюсь заполнить таблицу жанров этим SQL-запросом:
public override void Up()
{
Sql("INSERT INTO Genres (Id, Name) VALUES (1, Fantasy)");
Sql("INSERT INTO Genres (Id, Name) VALUES (2, Drama)");
Sql("INSERT INTO Genres (Id, Name) VALUES (3, Action-Adventure)");
Sql("INSERT INTO Genres (Id, Name) VALUES (4, Foreign)");
Sql("INSERT INTO Genres (Id, Name) VALUES (5, Horror)");
Sql("INSERT INTO Genres (Id, Name) VALUES (6, Romance)");
Sql("INSERT INTO Genres (Id, Name) VALUES (7, Crime)");
Sql("INSERT INTO Genres (Id, Name) VALUES (8, Thriller)");
Sql("INSERT INTO Genres (Id, Name) VALUES (9, Animated)");
Sql("INSERT INTO Genres (Id, Name) VALUES (10, Western)");
}
Не уверен, что делаю не так. если я заключу слово «фантазия» в кавычки (потому что он, возможно, ожидает строку?), я получаю такую ошибку:
Cannot insert explicit value for identity column in table 'Genres' when IDENTITY_INSERT is set to OFF.





Вам определенно нужны одинарные кавычки для вставки строковых значений. Из вашего сообщения об ошибке столбец Id представляет собой столбец с автоматическим увеличением (идентификатором). Таким образом, вы не можете явно определить эти значения без настройки identity_insert.
Самое простое решение - удалить Id из вставки и позволить базе данных сохранять эти значения. Например:
insert into genres (name) values ('Fantasy')
Спасибо. Это сработало. Странный. Я следил за учебником ранее, и они попросили меня вручную добавить идентификаторы - вот почему я попытался сделать это в этом.
@ J.G.Sable Когда вы добавили миграцию, проверьте, не было ли создано удостоверение в поле Id. Возможно, в руководстве, которому вы следовали, этого не было. Я рад, что теперь это работает на вас.
@ J.G.Sable Это не странно - это нормальное поведение. Вы просто еще не научились нормальному поведению. Если столбец является столбцом идентификатора, то в обычных обстоятельствах вы не можете указать значение идентификатора при вставке. Чтобы решить эту проблему, не вставляйте личность. Или отключите вставку идентификатора, как показано здесь. Или сделайте столбец не столбцом идентификаторов.
В качестве другого варианта вы можете включить УСТАНОВИТЬ IDENTITY_INSERT для этой таблицы. Это позволяет вставить явное значение в столбец идентификаторов таблицы.
А как было помечено строковое значение нужно ставить в одинарные кавычки
Sql("SET IDENTITY_INSERT Genres ON");
Sql("INSERT INTO Genres (Id, Name) VALUES (1, 'Fantasy')");
.....
Sql("SET IDENTITY_INSERT Genres OFF");
Проверьте определение вашей таблицы
Genres,Id- это столбец, созданный системойIdentity column, без указанияSET INDENTITY_INSERT-ON, вы не можете вставить свои собственные значения в этот столбец, даже если они идентичны.