违反Entity Framework Core中的PRIMARY KEY约束

保罗·梅姆斯

我有一个使用EFCore5的.NET5 Blazor Server应用程序。我有两个相互之间具有多对多关系的实体。我们称它们为“书”和“标签”。
EFCore提供BookTag连接表。

在我的页面上,我有一个表单,该表单中填充有书籍详细信息,并且具有用于标签的多选框。买书时会包括标签:context.Books.Include(x=>x.Tags);在调试模式下,我看到Book项有几个标签。但是,当我更新书的一些详细信息并保存表单时,context.Books.Update(book);由于BookTag连接表中的键重复打电话给我,但出现错误。
似乎EFCore尝试在该表中插入条目,但是它应该进行合并或插入/更新。

我已经阅读了许多关于多对多的文章,但是所有这些都只是展示了如何检索数据。我找不到如何更新的示例。

编辑
我正在使用@ carl-franklin在其出色的BlazorTrain系列中解释的GenericRepository

Edit2
这是一些相关代码,我现在不使用GenericRepo:
Startup.cs
services.AddDbContextFactory<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DbConnection")));

ApplicationDbContext.cs只有DbSet

Book.cs

[Key] 
public string Code { get; set; }
public string Name { get; set; } = "";
public virtual ICollection<Tag> TagCollection { get; set; }

Tag.cs

[Key] 
public string Code { get; set; }
public string Name { get; set; } = "";
public virtual ICollection<Book> BookCollection { get; set; }

Book.razor.cs

[Inject] private IDbContextFactory<ApplicationDbContext> contextFactory { get; set; }
private ApplicationDbContext context { get; set; }
protected IEnumerable<Book> BookList;

protected override async Task OnInitializedAsync()
{
    context = contextFactory.CreateDbContext();
    context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
    
    BookList = await context.Books.Include(x => x.TagCollection).ToListAsync();
}

private async Task UpdateBook(Book book)
{
    // Called after submitting form
    context.Books.Update(book);
    await context.SaveChangesAsync();
}

即使我什么都没做,只要更新我都会得到重复的错误: Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> Microsoft.Data.SqlClient.SqlException (0x80131904): Violation of PRIMARY KEY constraint 'PK_BookTag'. Cannot insert duplicate key in object 'dbo.BookTag'

在UpdateBook()中,我看到这本书具有预期的标签。似乎EFCore正在将它们插入联接表中,而不检查它们是否已存在。

罗伯特·哈维

要启用此功能,必须打开变更跟踪。否则,您必须自己跟踪更改。Entity Framework认为您正在添加新记录,但是键与现有记录相同,这就是为什么会出现错误的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

INSERT语句与Entity Framework Core中的FOREIGN KEY约束冲突

来自分类Dev

INSERT语句与Entity Framework Core中的FOREIGN KEY约束冲突

来自分类Dev

合并复制期间违反PRIMARY KEY约束

来自分类Dev

SQL Server 违反 PRIMARY KEY 约束

来自分类Dev

在 dot net core 和 entity framework core 中,当我使用 update-database –verbose 时,我收到此错误,该错误违反了“TContext”类型的约束

来自分类Dev

使用Entity Framework的C#中的代码契约不变违反

来自分类Dev

更新错误:导航属性违反了PRIMARY KEY约束

来自分类Dev

尝试克隆Entity Framework对象时违反了多重性约束

来自分类Dev

违反PRIMARY KEY约束。无法在对象中插入重复键

来自分类Dev

违反PRIMARY KEY约束“无法在对象”中插入重复的键。重复的键值为(,)

来自分类Dev

违反PRIMARY KEY约束无法在对象中插入重复的密钥

来自分类Dev

为什么在 SQL Server 中违反 PRIMARY KEY 约束返回错误代码 2627 而不是 2601?

来自分类Dev

Azure应用服务(移动应用)违反PRIMARY KEY约束的情况

来自分类Dev

在列上违反PRIMARY KEY约束的情况我未将其设置为

来自分类Dev

违反PRIMARY KEY约束“ PK_Address”。等等...我在做什么错?

来自分类Dev

我的第一个问题——违反 PRIMARY KEY 约束

来自分类Dev

EF6 SqlException: 违反 PRIMARY KEY 约束...重复键值为 (0)

来自分类Dev

如何检查数据库中是否存在具有特定 ID 的记录,避免已发布的 ASP.NET Core MVC 应用程序中出现“违反 PRIMARY KEY 约束”错误?

来自分类Dev

添加map <String,Entity>时违反约束的情况合并Entity

来自分类Dev

Entity Framework Core 中的 SqlGeometry

来自分类Dev

违反UNIQUE KEY约束无法在对象中插入重复的密钥

来自分类Dev

如何处理asp.net Web应用程序中的“违反UNIQUE KEY约束”异常

来自分类Dev

VHDL中违反索引约束

来自分类Dev

VHDL中违反索引约束

来自分类Dev

代码第一个数据库:SqlException:违反 PRIMARY KEY 约束“PK_dbo.PrivatKasses”。

来自分类Dev

违反 PRIMARY KEY 约束,即使我没有在上下文中添加或修改任何内容

来自分类Dev

Entity Framework autoincrement key

来自分类Dev

在Entity Framework Core中包括集合

来自分类Dev

Entity Framework Core中的动态查询执行

Related 相关文章

  1. 1

    INSERT语句与Entity Framework Core中的FOREIGN KEY约束冲突

  2. 2

    INSERT语句与Entity Framework Core中的FOREIGN KEY约束冲突

  3. 3

    合并复制期间违反PRIMARY KEY约束

  4. 4

    SQL Server 违反 PRIMARY KEY 约束

  5. 5

    在 dot net core 和 entity framework core 中,当我使用 update-database –verbose 时,我收到此错误,该错误违反了“TContext”类型的约束

  6. 6

    使用Entity Framework的C#中的代码契约不变违反

  7. 7

    更新错误:导航属性违反了PRIMARY KEY约束

  8. 8

    尝试克隆Entity Framework对象时违反了多重性约束

  9. 9

    违反PRIMARY KEY约束。无法在对象中插入重复键

  10. 10

    违反PRIMARY KEY约束“无法在对象”中插入重复的键。重复的键值为(,)

  11. 11

    违反PRIMARY KEY约束无法在对象中插入重复的密钥

  12. 12

    为什么在 SQL Server 中违反 PRIMARY KEY 约束返回错误代码 2627 而不是 2601?

  13. 13

    Azure应用服务(移动应用)违反PRIMARY KEY约束的情况

  14. 14

    在列上违反PRIMARY KEY约束的情况我未将其设置为

  15. 15

    违反PRIMARY KEY约束“ PK_Address”。等等...我在做什么错?

  16. 16

    我的第一个问题——违反 PRIMARY KEY 约束

  17. 17

    EF6 SqlException: 违反 PRIMARY KEY 约束...重复键值为 (0)

  18. 18

    如何检查数据库中是否存在具有特定 ID 的记录,避免已发布的 ASP.NET Core MVC 应用程序中出现“违反 PRIMARY KEY 约束”错误?

  19. 19

    添加map <String,Entity>时违反约束的情况合并Entity

  20. 20

    Entity Framework Core 中的 SqlGeometry

  21. 21

    违反UNIQUE KEY约束无法在对象中插入重复的密钥

  22. 22

    如何处理asp.net Web应用程序中的“违反UNIQUE KEY约束”异常

  23. 23

    VHDL中违反索引约束

  24. 24

    VHDL中违反索引约束

  25. 25

    代码第一个数据库:SqlException:违反 PRIMARY KEY 约束“PK_dbo.PrivatKasses”。

  26. 26

    违反 PRIMARY KEY 约束,即使我没有在上下文中添加或修改任何内容

  27. 27

    Entity Framework autoincrement key

  28. 28

    在Entity Framework Core中包括集合

  29. 29

    Entity Framework Core中的动态查询执行

热门标签

归档