我正在创建这个TaskManager应用程序,并且我已经设置了模型类、dbcontext和表单。
当我在页面上按下提交按钮2次时,我会得到以下错误:
Microsoft.EntityFrameworkCore.DbUpdateException:'更新条目时出错。有关详细信息,请参阅内部异常。'
内部异常:
SqlException:当identity_insert设置为OFF时,无法为表"Tasks"中的标识列插入显式值。
@page "/task/createtask"
@inject AppDbContext _context;
<h3>Create a Task</h3>
<EditForm Model="@taskModel" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group">
<label for="TitleTb">Enter the title:</label>
<InputText id="TitleTb" class="form-control" @bind-Value="taskModel.Title"></InputText>
<label for="DescTb">Enter the description:</label>
<InputText id="DescTb" class="form-control" @bind-Value="taskModel.Description"></InputText>
<label for="SelectTb"> <span class="text-warning">optional</span> Enter the priority level:</label>
<InputSelect id="SelectTb" class="form-control" @bind-Value="taskModel.ImportanceType">
<option value="">Select priority...</option>
<option value="1" class="text-danger">Very important</option>
<option value="2" class="text-warning">Can wait</option>
<option value="3" class="text-primary">Not that important</option>
</InputSelect>
<br/>
<button type="submit" class="btn btn-primary">Submit!</button>
</div>
</EditForm>
@code {
private TaskModel taskModel = new TaskModel();
private void HandleValidSubmit()
{
taskModel.IsCompleted = false;
taskModel.DateCreated = DateTime.Today;
_context.Tasks.Add(taskModel);
_context.SaveChanges();
}
}
模型和上下文:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace TaskManagerApp.Models
{
public class TaskModel
{
[Key]
[Required]
public int Id { get; set; }
[Required]
[MaxLength(20)]
[MinLength(3)]
public string Title { get; set; }
[MaxLength(150)]
[MinLength(5)]
public string Description { get; set; }
public DateTime DateCreated { get; set; }
[Required]
public bool IsCompleted { get; set; }
public string ImportanceType { get; set; }
}
}
DbContext:
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TaskManagerApp.Models;
namespace TaskManagerApp.Data
{
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
public DbSet<TaskModel> Tasks { get; set; }
}
}
此外,我还使用了两个dbcontext,一个来自Microsoft身份验证系统标识,另一个是我创建的名为AppDbContext
的dbcontext。
有什么办法解决吗?如果是的话,我将非常感谢你的帮助!
谢谢!
第一次按下submit时,taskModel会被数据库分配一个Id。
第二次按下该按钮时,您正在尝试添加与上一次Id相同的新记录。
private void HandleValidSubmit()
{
taskModel.IsCompleted = false;
taskModel.DateCreated = DateTime.Today;
_context.Tasks.Add(taskModel);
_context.SaveChanges();
this.taskModel = new TaskModel(); // <== Reset the model
}