无法从具有Identity列的表中删除记录

时间:2017-09-12 10:21:15

标签: aspnetboilerplate asp.net-boilerplate

我有一个表,其代码为主键而不是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)
        {

        }
    }

但如果从表中删除Id列,则可以正常工作。我希望Id列和Code列都为PK。

2 个答案:

答案 0 :(得分:2)

正在发生的事情是,FullAuditedEntity<int>会自动创建一个整数的Id字段。你不需要这样做:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }

如果要创建包含复合键的表,请继续添加代码字段,而不复制Id字段。那你就没问题了。

答案 1 :(得分:0)

建议我们使用Id作为PK并将其他列作为唯一约束。因此,如果您使用Id作为PK,则不会遇到此类问题。