【问题标题】:Entity Framework with composite key: Violation of PRIMARY KEY constraint具有复合键的实体框架:违反 PRIMARY KEY 约束
【发布时间】:2015-03-27 08:13:28
【问题描述】:

这是我的模型:

[Key, Column(Order=1)] // composite key with ExternalId. WebshopId+ExternalId must be unique
[ForeignKey("Webshop_Id")]
public virtual Webshop WebshopEntity
{
    get { return _Webshop; }
    set { _Webshop = value; }
}

[NotMapped]
private Webshop _Webshop;

public int Webshop_Id { get; set; }

[Key, Column(Order = 2)]
[MinLength(1, ErrorMessage = "ExternalId must be atleast 1 character")]
public virtual string ExternalId { get; set; }

Product 应具有 Webshop(它的父级)和 ExternalId 的复合主键。

现在我的数据库已填满,我将添加一个新的Product,其父级具有相同的ExternalId 但不同的Webshop。这会导致以下错误:

违反主键约束“PK_dbo.Products”。无法在对象“dbo.Products”中插入重复键。重复键值为 (110)。

我做错了什么? (使用 EF6)

【问题讨论】:

  • 你能发布你的 dbo.Products 表的 DDL SQL 吗?
  • 尝试在 Webshop_Id 而不是 WebshopEntity 上定义 [Key]。
  • 这就是问题所在,Webshop_id 上的 [Key] 成功了。表定义现在显示 CONSTRAINT [PK_dbo.Products] PRIMARY KEY CLUSTERED ([Webshop_Id] ASC, [ExternalId] ASC),而在此更改之前,它缺少 Webshop_Id ASC 部分。谢谢! (如果需要,请将其作为答案提交)

标签: c# asp.net-mvc entity-framework entity-framework-6


【解决方案1】:

[Key] 注释应该在Webshop_Id 上定义,而不是在WebshopEntity 上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多