Cześć.
Mam kłopot z aktualizacją rekordu w relacji wiele do wielu. Moje obiekty to:
Product
, Meal
oraz MealProduct
. Jeden posiłek może zawierać wiele produktów, problem pojawił się w momencie, gdy chciałem zaktualizować rekord, kiedy to użytkownik nie dodał żadnego posiłku dla danego produktu - tabela w MealProduct była pusta. Następnie chcąc dodać produkty do posiłku zwróciło mi ex:
Microsoft.Data.SqlClient.SqlException (0x80131904): Cannot update identity column 'Id'.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__169_0(Task`1 result)
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
Dodam, że moim PK w tabeli MealProduct
jest ProductId
oraz MealId
. Poniżej konfig:
public class MealProductMap
{
public MealProductMap(EntityTypeBuilder<MealProduct> entityBuilder)
{
entityBuilder
.HasKey(t => new { t.MealId, t.ProductId });
entityBuilder
.HasOne(t => t.Meal)
.WithMany(a => a.MealProducts)
.HasForeignKey(t => t.MealId)
.OnDelete(Microsoft.EntityFrameworkCore.DeleteBehavior.Cascade);
entityBuilder
.HasOne(t => t.Product)
.WithMany(a => a.MealProducts)
.HasForeignKey(t => t.ProductId)
.OnDelete(Microsoft.EntityFrameworkCore.DeleteBehavior.Cascade);
}
}
Poniżej też część zapytania, które wygenerował EF CORE i zamierzał wykonać:
UPDATE [MealProducts] SET [CanBeEdited] = @p0, [CreationDate] = @p1, [DeleteDate] = @p2, [Id] = @p3, [IsDeleted] = @p4, [Quantity] = @p5
WHERE [MealId] = @p6 AND [ProductId] = @p7;
SELECT [ModifyDate]
FROM [MealProducts]