我正在尝试将一些数据保存到我的 MenuItems 表中,但我被错误阻止了
SqlException: Cannot insert explicit value for identity column in table 'MenuCategories' when IDENTITY_INSERT is set to OFF
我只是尝试使用我拥有的类别 ID 设置外键,我不太确定为什么会出现上述错误。
这是我的 MenuItem
模型:
public class MenuItemViewModel
{
[Key]
[Column("MenuItem_Id")]
public int MenuItemId { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Description { get; set; }
[Required]
public decimal Price { get; set; }
[Required]
[Column("MenuCategory_Id")]
public MenuCategoryViewModel MenuCategory { get; set; }
}
这是我的 MenuCategory
模型:
public class MenuCategoryViewModel
{
[Key]
[Column("MenuCategory_Id")]
public int MenuCategoryId { get; set; }
[Required]
public string Name { get; set; }
}
我正在尝试为其分配现有类别的 ID,我不希望它创建新类别。
最佳答案
我必须假设您的 DbContext
类是这样的:
public class Context: DbContext
{
public Context(DbContextOptions<MenuContext> options)
: base(options)
{ }
public DbSet<MenuCategory> MenuCategories{ get; set; }
public DbSet<MenuItem> MenuItems { get; set; }
}
所以你的 Controller 可以这样编码:
public async Task<IActionResult> Create(MenuItemViewModel model)
{
if (ModelState.IsValid)
{
var menuItem = new MenuItem
{
Name = model.Name,
...
};
var menuCategory = _Context.MenuCategories.Find(model.MenuCategory.MenuCategoryId);
menuItem.MenuCategory = menuCategory;
_Context.MenuItems.Add(menuItem);
await _Context.SaveChangesAsync();
return RedirectToAction(nameof(Index), new { id = menuItem.MenuCategory.MenuCategoryId });
}
return View(menuItem);
}
据我所知,您假设如果您告诉您的 View 您的 MenuCategory
具有选定的 ID,您的 View 将填充 MenuCategory
。它不是那样工作的。该 View 无法知道您的 MenuCategory
是什么。您需要使用 DbContext
填充这些值,这发生在您的 Controller 中。
此外,最好将实体与 View 模型分开。如果您的类有自己的简单职责,事情就容易多了:您的实体将代表数据库中的逻辑记录,而您的 View 模型将代表来自和发送给您的 Controller 的数据。
关于c# - EF 核心 SQLException : Cannot insert explicit value for identity column in table 'MenuCategories' when IDENTITY_INSERT is set to OFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58842173/