【发布时间】:2023-04-02 15:50:01
【问题描述】:
我正在使用 Razor 页面创建一个 CRUD 应用程序。我正在使用基于 SQL 的数据库。我不想让工具具有相同的工具编号。如果可能,异常处理将是理想的。获取一条消息,其中显示“工具编号已存在”等。
IDENTITY(1,1) 在编辑工具时收到以下错误消息:
SqlException:无法更新标识列“ToolNumber”。
UNIQUE 当我为两个工具设置相同的工具编号时,我收到以下错误消息:
SqlException:违反 UNIQUE KEY 约束“UQ__TOOL__F63D0498394D4BBD”。无法在对象“dbo.TOOL”中插入重复键。重复键值为 (1)。
这是我的Tool 实体:
public class Tool
{
[Required(ErrorMessage = "RFID Kode kreves")]
public long ToolId { get; set; }
[Required(ErrorMessage = "Verktøynummer kreves")]
public int ToolNumber { get; set; }
[Required(ErrorMessage = "Model navn kreves")]
[StringLength(20, MinimumLength = 3, ErrorMessage = "Maksimal lengde 20 bokstaver")]
public string? Model { get; set; }
public bool Borrowed { get; set; }
[StringLength(20, MinimumLength = 3, ErrorMessage = "Maksimal lengde 20 bokstaver")]
public string? Manufacturer { get; set; }
[Required(ErrorMessage = "Verktøy kategori kreves")]
[StringLength(20, MinimumLength = 3, ErrorMessage = "Maksimal lengde 20 bokstaver")]
public string Category { get; set; }
public long EmployeeId { get; set; }
[StringLength(30, MinimumLength = 3, ErrorMessage = "Maksimal lengde 30 bokstaver")]
public string? EmployeeName { get; set; }
public string? Description { get; set; }
[StringLength(20, MinimumLength = 3, ErrorMessage = "Maksimal lengde 20 bokstaver")]
public string? SerialNumber { get; set; }
public DateTime? DateOfPurchase { get; set; }
public int? Reminder { get; set; }
public string? Price { get; set; }
[StringLength(10, MinimumLength = 0, ErrorMessage = "Maksimal lengde 10 bokstaver")]
public string? Condition { get; set; }
public DateTime? DateOfCalibration { get; set; }
public string? CalibrationPlace { get; set; }
public string? PhotoPath { get; set; }
}
这是我的 Add 方法:
public Tool Add(Tool newTool)
{
context.TOOL.Add(newTool);
context.SaveChanges();
return newTool;
}
这是我的更新方法:
public Tool Update(Tool updatedTool)
{
var tool = context.TOOL.Attach(updatedTool);
tool.State = Microsoft.EntityFrameworkCore.EntityState.Modified;
context.SaveChanges();
return updatedTool;
}
【问题讨论】:
-
同时拥有
ToolID和ToolNumber有什么意义? 实际键是什么?如果是ToolID,为什么要使用IDENTITY和ToolNumber?事实上,为什么要使用ToolNumber? -
您是否考虑过为
ToolNumber使用序列?你在使用 SQL Server 吗?如果使用序列,则不需要异常处理(针对重复项)。 -
您好,这个项目的公司。他们想要 ToolNumber 和 TooID。与我一起工作的另一个学生希望 ToolId 成为主键。 ToolNumber 只是一个数字,用于分隔两个相同型号的工具。 ToolId 是该工具将拥有的 RFID 标签号。
标签: c# sql entity-framework razor-pages