c# - 当我尝试在字段为主键时插入数据库时,为什么“ID = 0”?
问题描述
我正在尝试BookInfo
在数据库的表中插入(创建)一本书,但出现此错误:
处理请求时发生未处理的异常。SqlException:INSERT 语句与 FOREIGN KEY 约束“FK_Book_Categories_BookInfo_BookID”冲突。冲突发生在数据库“MyBookShopDB”、表“dbo.BookInfo”、列“BookID”中。
我有BookInfo
一个Category
多对多的关系。
我正在使用视图模型来完成这项工作。我认为问题在于,当我跟踪我的Create
操作方法时,我看到的BookID
是“0”
但是BookID
被定义为自动增量主键,我不知道为什么当我尝试在数据库中创建或插入一本书时它仍然是“0”....
有谁知道我应该怎么做才能解决这个问题?
谢谢!
public async Task<IActionResult> Create(BooksCreateViewModel ViewModel)
{
if (ModelState.IsValid)
{
Book book = new Book()
{
ISBN = ViewModel.ISBN,
Stock = ViewModel.Stock,
Price = ViewModel.Price,
Title = ViewModel.Title,
};
await _context.Books.AddAsync(book);
}
}
这是 BookInfo 类:
[Table("BookInfo")]
public class Book
{
[Key]
public int BookID { get; set; }
[Required]
public string Title { get; set; }
public string Summary { get; set; }
public int Price { get; set; }
public int Stock { get; set; }
}
这是迁移类:
migrationBuilder.CreateTable(
name: "BookInfo",
columns: table => new
{
BookID = table.Column<int>(nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Title = table.Column<string>(nullable: false),
Summary = table.Column<string>(nullable: true),
Price = table.Column<int>(nullable: false),
Stock = table.Column<int>(nullable: false),
},
SQL
ALTER TABLE [dbo].[Book_Categories] ADD CONSTRAINT [PK_Book_Categories] PRIMARY KEY CLUSTERED ([BookID] ASC,[CategoryID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
解决方案
在 Book Entity 中,您是否向 Book.ID 添加了一个装饰器以通知实体框架允许服务器分配值?
像这样的东西:
public class Book
{
public Book() { }
[DatabaseGenerated(DatabaseGeneratedOption.Identity), Key]
public int ID { get; set; }
public string ISBN { get; set; }
public string Stock { get; set; }
public string Price { get; set; }
public string Title { get; set; }
}
推荐阅读
- javascript - JavaScript:对数组元素进行排序,其中“真实”字段值排在首位
- wizard - react-final-form - 向导表单从父级访问值
- c - 实现 atoi - 递增变量 j 时出现分段错误
- android - 签名的 APK 构建失败 re:play-services-ads-identifier.properties 冲突
- c++ - C++ - 尝试 push_back 指向位于另一个 CPP 文件中的向量的函数指针时出错
- javascript - nuxt.js !process.server 永远不会进入 if 语句
- java - 我正在尝试从 52 张牌中随机打印 5 张牌,然后按升序对 5 张牌进行排序
- android - 如何在按钮单击android中自动启动活动?
- excel - 如何转到活动单元格的参考?
- java - Forge MDK runClient 崩溃,可能是因为 LWJGL。我该如何解决?