【问题标题】:The INSERT statement conflicted with the FOREIGN KEY constraint "FK_products_categories_CategoryId"INSERT 语句与 FOREIGN KEY 约束“FK_products_categories_CategoryId”冲突
【发布时间】:2020-06-29 08:54:58
【问题描述】:

我正在尝试将Product 实体添加到数据库中,Product 包含另一个名为Category 的实体,我将在下面包含它。问题是我在添加项目时出错:

INSERT 语句与 FOREIGN KEY 约束“FK_products_categories_CategoryId”冲突。冲突发生在数据库“ElectronicStoreDB”、表“dbo.categories”、列“CategoryId”中

这里是实体

public class Product 
{
    [Key]
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ProductId { get; set; }

    [Required]
    public string ProductName { get; set; }

    [MaxLength(1000)]
    [Required]
    public string Description { get; set; }

    [Required]
    public long Price { get; set; }

    [Required]
    public int Quantity { get; set; }

    [Required]
    public Category Category { get; set; }
}

public class Category 
{
    [Key]
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid CategoryId { get; set; }

    [Required]
    public string CategoryName { get; set; }

    [MaxLength(1000)]
    [Required]
    public string Description { get; set; }
}

然后我在POST 方法中将SaveProductRequest 映射到Product 实体

public class ProductSaveRequest 
{
    [Required]
    public string ProductName { get; set; }

    [MaxLength(1000)]
    [Required]
    public string Description { get; set; }

    [Required]
    public long Price { get; set; }

    [Required]
    public int Quantity { get; set; }

    [Required]
    public Guid CategoryId { get; set; }
}

映射过程是:

// Products Mapping.
CreateMap<ProductSaveRequest, Product>();

dbContext添加代码为:

public async Task AddAsync(Product product) 
{
    await context.products.AddAsync(product);
}

我遇到此类问题的任何解决方案?

【问题讨论】:

  • 您要添加的产品类别的值是多少?
  • @RyanThomas 我只发送带有产品属性的 CategoryId 的其余部分
  • @RyanThomas 有什么想法吗?
  • 我认为你需要一个明确的 Product 外键属性。比如:[ForeignKey(nameof(Category))] public Guid CategoryId { get; set; }。现在 AutoMapper 正在将其映射到一个新的 Category 对象,EF 将其视为一个新实体,并尝试插入一个新行。
  • @juunas 你能解释更多关于映射的信息吗?如果您能写出答案,我将不胜感激

标签: c# sql-server asp.net-mvc asp.net-core


【解决方案1】:

我通过在基于juunas 评论的产品模型中提供一个明确的CategoryId 作为ForeignKey 解决了这个问题。

public class Product {

    [Key]
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ProductId { get; set; }

    [Required]
    public string ProductName { get; set; }

    [MaxLength(1000)]
    [Required]
    public string Description { get; set; }

    [Required]
    public long? Price { get; set; }

    [Required]
    public int? Quantity { get; set; }

    [Required]
    public Guid CategoryId { get; set; }

    [ForeignKey("CategoryId")]
    public Category Category { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多