mysql - 无法跟踪实体类型“Decks”的实例,因为已在跟踪另一个具有键值“{CardId: 578}”的实例
问题描述
我是 EF-Core 的新手并正在尝试。我遇到了一个问题,我想在 MySQL 表中更新或插入条目。
模型如下所示:
public partial class Decks
{
public int DecklistId { get; set; }
public int CardId { get; set; }
public int Amount { get; set; }
public bool Maindeck { get; set; }
public virtual Cards Card { get; set; }
}
}
实体配置如下:
modelBuilder.Entity<Decks>(entity =>
{
entity.HasKey(e => new { e.DecklistId, e.CardId, e.Maindeck })
.HasName("PRIMARY"); ;
entity.HasIndex(e => e.CardId);
entity.ToTable("decks");
entity.Property(e => e.DecklistId).HasColumnName("decklistID");
entity.Property(e => e.CardId).HasColumnName("cardID");
entity.Property(e => e.Maindeck).HasColumnName("maindeck");
entity.Property(e => e.Amount).HasColumnName("amount");
entity.HasOne(e => e.Card)
.WithOne()
.HasPrincipalKey<Decks>(b => b.CardId);
});
至少在我的回购中使用此代码来确定是否应该更新或插入数据。
public async Task<StandardResponse> UpdateDeck(List<Decks> deckCards)
{
StandardResponse errors = new StandardResponse { message = null, status = 200 };
try
{
deckCards.ForEach(x =>
{
Decks existingCard = _context.Decks.Find(x.DecklistId,x.CardId, x.Maindeck);
if (existingCard == null)
{
_context.Decks.Add(x); <---- Here occurs the Error
}
else
{
_context.Entry(existingCard).CurrentValues.SetValues(x);
}
_context.SaveChanges();
});
}
catch (DbUpdateException ex)
{
return new StandardResponse { message = ex, status = 501 };
}
return new StandardResponse { message = "Deck updated!", status = 200 };
}
当我必须对具有相同 DecklistId 和相同 CardId 的对象进行处理时,就会出现问题。即使 Maindeck 属性不同,我也会收到错误,我无法解释自己为什么...这是我要插入/更新的对象列表。
将添加第一个对象。在数据库中当然找不到第二个对象,并且在 Add-Statement 处发生错误。
[
{
"decklistId": 28,
"cardId": 578,
"amount": 4,
"maindeck": true
},
{
"decklistId": 28,
"cardId": 578,
"amount": 4,
"maindeck": false
}
]
会是什么呢?
感谢您的帮助!
解决方案
推荐阅读
- django - 构建提供 django 休息框架模型的可选反应日期字段的正确方法是什么?
- php - PHP SOAP - 给出不存在的 [HTTP] 内部服务器错误
- arrays - 将保存在数据库中的数组格式化为 laravel 中的刀片视图
- java - 从给定模式中选择 m 个不同对象的最快方法?
- android - LiveData + ViewModel + Room:公开查询返回的 LiveData 随时间变化(通过 fts 搜索)
- python - 如何用专门的字母打印一个字典值
- apache-spark - Spark SQL - 重新分区后分组
- python - 创建具有固定大小的窗口时,窗口大小大于特定大小
- python-3.x - 如何将此 for 循环更改为字典/列表理解?
- html - 填充未应用于角度材料中的 html 标记