无法从具有标识列的 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,你就不会遇到这样的问题。