Я новичок в 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
}
]
Что бы это могло быть?
Спасибо за помощь, ребята!