“当IDENTITY_INSERT设置为OFF时,无法在表’电影’中为标识列插入显式值。”
我首先使用代码entity framework。 我一直在收到以下错误,无法弄清楚如何修复它:
“当IDENTITY_INSERT设置为OFF时,无法在表’电影’中为标识列插入显式值。”
我已经读过在我的迁移查询周围设置Sql(“SET IDENTITY_INSERT Movies ON”)和OFF应修复此问题,但是我没有在Movies表上运行任何查询。
电影表:
{ public class Movies { public byte Id { get; set; } [Display (Name = "Movie Name")] public string MovieName { get; set; } public Genre Genre { get; set; } [Required] public byte GenreId { get; set; } [Display (Name = "Release Date")] public DateTime ReleaseDate { get; set; } public DateTime DateAdded { get; set; } [Display (Name = "Numbers in Stock")] public int NumberInStock { get; set; } } }
我的电影控制器:
public ActionResult Save(Movies movies) { if (movies.Id == 0) { _context.Movies.Add(movies); } else { var moviesInDb = _context.Movies.Single(c => c.Id == movies.Id); moviesInDb.MovieName = movies.MovieName; moviesInDb.ReleaseDate = movies.ReleaseDate; moviesInDb.GenreId = movies.GenreId; moviesInDb.NumberInStock = movies.NumberInStock; } _context.SaveChanges(); return RedirectToAction("Index, Movies"); }
我收到_context.SaveChanges()的错误;
我对我的Genre表有查询,如下所示
public partial class PopulateGenreTable : DbMigration { public override void Up() { Sql("INSERT INTO Genres (Id, Name) VALUES (1, 'Action')"); Sql("INSERT INTO Genres (Id, Name) VALUES (2, 'Thriller')"); Sql("INSERT INTO Genres (Id, Name) VALUES (3, 'Family')"); Sql("INSERT INTO Genres (Id, Name) VALUES (4, 'Romance')"); Sql("INSERT INTO Genres (Id, Name) VALUES (5, 'Comedy')"); } public override void Down() { } }
这是我播种dabase的唯一地方
我该如何解决? 请清楚解释,因为我是一个绝对的初学者。 谢谢
将记录插入Genres表时,可以通过不指定Id
来轻松避免此错误。 因为看起来Id
是一个IDENTITY COLUMN。 因此,在插入记录时不必指定值。 数据库将根据您定义的IDENTITY始终生成正确的Id
值。 通常我们有INT类型和IDENTITY(1,1)的列。 这意味着将要插入的第一行将具有值为1的Id
。第二行的值为2,依此类推,依此类推。
有关详细信息,请查看此处 。
关于IDENTITY_INSERT...
的错误消息,当我们想要将一个(或多个)显式值插入到具有IDENTITY的列时,可以使用命令SET IDENTITY_INSERT。 有关如何使用此命令的详细说明,请参见此处 。
您必须先打开它,然后插入然后将其关闭
Sql("SET IDENTITY_INSERT Genres ON"); Sql("INSERT INTO Genres (Id, Name) VALUES (1, 'Action')"); Sql("INSERT INTO Genres (Id, Name) VALUES (2, 'Thriller')"); Sql("INSERT INTO Genres (Id, Name) VALUES (3, 'Family')"); Sql("INSERT INTO Genres (Id, Name) VALUES (4, 'Romance')"); Sql("INSERT INTO Genres (Id, Name) VALUES (5, 'Comedy')"); Sql("SET IDENTITY_INSERT Genres OFF");
但是,拥有一个标识列的意义在于我们不会选择标识所持有的值(在代理键上读取)。 在这种情况下,您只需从插入中删除ID列
Sql("INSERT INTO Genres (Name) VALUES ('Action')"); Sql("INSERT INTO Genres (Name) VALUES ('Thriller')"); Sql("INSERT INTO Genres (Name) VALUES ('Family')"); Sql("INSERT INTO Genres (Name) VALUES ('Romance')"); Sql("INSERT INTO Genres (Name) VALUES ('Comedy')");