Как предотвратить вставку новых типов упражнений при создании тренировки в приложении Xamarin для Android?C#

Место общения программистов C#
Ответить
Anonymous
 Как предотвратить вставку новых типов упражнений при создании тренировки в приложении Xamarin для Android?

Сообщение Anonymous »

Я разрабатываю приложение Xamarin для Android для управления тренировками, где пользователи могут создавать тренировки, состоящие из упражнений, классифицированных по типам упражнений. Каждый тип упражнения связан с определенными атрибутами, такими как название, описание и целевая группа мышц.
Я столкнулся с проблемой при создании тренировки в своем приложении. При попытке сохранить данные тренировки в базу данных я получаю следующую ошибку:

Код: Выделить всё

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.
Похоже, что Entity Framework Core пытается вставить новые записи в таблицу «Типы упражнений», хотя я хочу связать с тренировкой только существующие типы упражнений.
Вот краткое изложение логики моего кода:
У меня есть класс 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();
}
Может ли кто-нибудь посоветовать лучший способ предотвратить попытки Entity Framework Core вставлять новые типы упражнений при создании тренировки? Будем очень признательны за любые идеи и предложения!

Подробнее здесь: https://stackoverflow.com/questions/783 ... -xamarin-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»