【问题标题】:Entity Framework Primary Key column not auto incrementing实体框架主键列不自动递增
【发布时间】:2014-05-20 01:05:27
【问题描述】:

我目前有一个问题,每次我执行 db.SaveChanges 时我的 ShoppingBasket 表中的主键都不会自动递增,这会导致重复键错误。我的印象是实体框架数据库中的任何主键都已设置为自动递增,但也许我错了?

购物篮.db

CREATE TABLE [dbo].[ShoppingBasket] (
[CartID]         INT          NOT NULL,
[BasketID]       VARCHAR (50) NULL,
[BasketQuantity] INT          NOT NULL,
[ProductID]      INT          NOT NULL,
PRIMARY KEY CLUSTERED ([CartID] ASC),
CONSTRAINT [FK_ShoppingBasket_Products] FOREIGN KEY ([ProductID]) REFERENCES [dbo].[Products] ([ProductID])
);

我已经尝试了一些建议,例如将代码中的 CartID 键分配为 CartID = -1 并在 ShoppingBasket 模型中添加 [DatabaseGenerated] 和 [Key],但我仍然遇到相同的错误。

ShoppingBasket.Model

public partial class ShoppingBasket
{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CartID { get; set; }
    public string BasketID { get; set; }
    public int BasketQuantity { get; set; }
    public int ProductID { get; set; }

    public virtual Product Product { get; set; }
}

手动插入唯一键时我没有错误,因此我认为问题在于找到使 CartID 自动递增的解决方案。

【问题讨论】:

    标签: c# sql entity-framework


    【解决方案1】:

    默认情况下主键不递增。您还应该添加IDENTITY(1, 1)。因此,代码如下所示:

    CREATE TABLE [dbo].[ShoppingBasket] (
        [CartID]         INT          NOT NULL IDENTITY(1,1),
        [BasketID]       VARCHAR (50) NULL,
        [BasketQuantity] INT          NOT NULL,
        [ProductID]      INT          NOT NULL,
        PRIMARY KEY CLUSTERED ([CartID] ASC),
        CONSTRAINT [FK_ShoppingBasket_Products] FOREIGN KEY ([ProductID]) REFERENCES [dbo].[Products] ([ProductID])
    );
    

    【讨论】:

    • 感谢您的澄清,也解决了我的问题!
    【解决方案2】:

    我认为 Identity 字段应该是 bigint。

    CREATE TABLE [dbo].[ShoppingBasket] (
        [CartID]         BIGINT       NOT NULL IDENTITY(1,1),
        [BasketID]       VARCHAR (50) NULL,
        [BasketQuantity] INT          NOT NULL,
        [ProductID]      INT          NOT NULL,
        PRIMARY KEY CLUSTERED ([CartID] ASC),
        CONSTRAINT [FK_ShoppingBasket_Products] FOREIGN KEY ([ProductID]) REFERENCES [dbo].[Products] ([ProductID])
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多