【发布时间】: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