无法从具有标识列的 table 中删除记录
Cannot delete record from table which has Identity column
我有一个 table,它将代码作为主键而不是 Id,当我调用 DeleteAsync 方法时,我得到异常 Message = "Cannot update identity column 'Id'."
。
[Table("Test")]
public class Test: FullAuditedEntity<int>
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Code { get; set; }
public async Task DeleteTest(int code)
{
try
{
await _supplierRepository.DeleteAsync(p => p.Code== code);
}
catch (Exception ex)
{
}
}
但是如果我从 table 中删除 Id
列,它就可以正常工作。我想要 Id
列和 Code
列作为 PK。
发生的事情是,FullAuditedEntity<int>
自动创建了一个整数 Id 字段。您不需要这样做:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }
如果您想创建一个带有复合键的 table,请继续,只需添加您的代码字段而不复制 Id 字段。那你就没有问题了。
建议我们使用Id
作为PK,其他列作为唯一约束。所以如果你用Id
作为PK,你就不会遇到这样的问题。
我有一个 table,它将代码作为主键而不是 Id,当我调用 DeleteAsync 方法时,我得到异常 Message = "Cannot update identity column 'Id'."
。
[Table("Test")]
public class Test: FullAuditedEntity<int>
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Code { get; set; }
public async Task DeleteTest(int code)
{
try
{
await _supplierRepository.DeleteAsync(p => p.Code== code);
}
catch (Exception ex)
{
}
}
但是如果我从 table 中删除 Id
列,它就可以正常工作。我想要 Id
列和 Code
列作为 PK。
发生的事情是,FullAuditedEntity<int>
自动创建了一个整数 Id 字段。您不需要这样做:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }
如果您想创建一个带有复合键的 table,请继续,只需添加您的代码字段而不复制 Id 字段。那你就没有问题了。
建议我们使用Id
作为PK,其他列作为唯一约束。所以如果你用Id
作为PK,你就不会遇到这样的问题。