Я столкнулся с проблемой при создании тренировки в своем приложении. При попытке сохранить данные тренировки в базу данных я получаю следующую ошибку:
Код: Выделить всё
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.
SqlException: Cannot insert explicit value for identity column in table 'ExerciseTypes' when IDENTITY_INSERT is set to OFF.
Вот краткое изложение логики моего кода:
У меня есть класс Workout, представляющий тренировку, который содержит коллекцию объектов PracticeTypeGroup.
Каждый объект PracticeTypeGroup имеет связанный тип упражнений и коллекцию объектов упражнений.
При создании тренировки я извлекаю существующие типы упражнений из базы данных и связываю их с тренировкой.
Я не собираюсь вставлять новые типы упражнений при создании тренировка; Я хочу использовать только существующие.
Я подозреваю, что в логике моего кода или конфигурации базы данных может быть ошибка, из-за которой Entity Framework Core пытается вставить новые типы упражнений.
Код: Выделить всё
private async void CompleteWorkout()
{
Workout workout = new Workout();
workout.ExerciseTypeGroups = new List(ExerciseTypeGroups);
string userIdString = Preferences.Get("UserID", defaultValue: null);
if (int.TryParse(userIdString, out int userId))
{
workout.CreatorId = userId;
foreach (var item in workout.ExerciseTypeGroups)
{
ExerciseType exerciseTypefromDb = await ExerciseTypeManager.ReadAsync(item.ExerciseType.ExerciseTypeId); //smenq exercise type s tozi ot bazata danni
item.ExerciseType = exerciseTypefromDb;
}
await WorkoutManager.CreateAsync(workout);
}
}
Код: Выделить всё
public async Task CreateAsync(Workout item)
{
try
{
dbContext.Workouts.Add(item);
await dbContext.SaveChangesAsync();
}
catch (Exception)
{
throw;
}
}
Код: Выделить всё
public class ExerciseTypeGroup
{
[Key]
public int ExerciseTypeGroupId { get; set; }
public ExerciseType ExerciseType { get; set; }
public List Exercises { get; set; }
public ExerciseTypeGroup()
{
Exercises = new List();
}
}
Код: Выделить всё
public class ExerciseType
{
[Key]
public int ExerciseTypeId { get; set; }
public string Name { get; set; }
public string? Description { get; set; }
public BodyParts? TargetedMuscle { get; set; }
public Equipment? Equipment { get; set; }
public ExerciseType()
{
}
public ExerciseType(string name, string description, BodyParts targetedmuscle, Equipment equipment)
{
Name = name;
Description = description;
TargetedMuscle = targetedmuscle;
Equipment = equipment;
}
}
Код: Выделить всё
public class Workout
{
[Key]
public int WorkoutId { get; set; }
public List ExerciseTypeGroups { get; set; }
public int CreatorId { get; set; }
public User? Creator { get; set; }
public Status Status { get; set; }
public Workout()
{
ExerciseTypeGroups = new List();
}
public Workout(User user)
{
Status = Status.Waiting;
Creator = user;
ExerciseTypeGroups = new List();
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... -xamarin-a
Мобильная версия