我是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属性不同,我也会收到错误,并且我无法向自己解释原因... 这是我要插入/更新的对象列表。
将添加第一个对象。当然,在数据库中找不到第二个对象,并且在添加语句中会发生错误。
[
{
"decklistId": 28,
"cardId": 578,
"amount": 4,
"maindeck": true
},
{
"decklistId": 28,
"cardId": 578,
"amount": 4,
"maindeck": false
}
]
那会是什么?
感谢大家的帮助!