c# - EF 核心 SQLException : Cannot insert explicit value for identity column in table 'MenuCategories' when IDENTITY_INSERT is set to OFF

标签 c# sql entity-framework asp.net-core

我正在尝试将一些数据保存到我的 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/

相关文章:

c# - "where"条款 : entity id is in a potentially null array

c# - First <>扩展方法是否有安全版本?

c# - 在两个列表上使用联合没有按预期工作

SQL 聚合使用 DISTINCT 对 ID 按最新日期

sql - 将COUNT() sql查询的结果保存到powershell中的变量中

entity-framework - Edmx 更新模型从自动生成中添加空行

javascript - 在 webbrowser 控件中运行 javascript 的问题 c#

c# - 按用户定义的顺序将选定的 CSV 文件导入新的 Excel 文件

mysql - 如何根据现有列计算列值

c# - 我的服务和存储库层的职责