#c# #entity-framework-core
#c# #сущность-фреймворк-ядро
Вопрос:
Я довольно новичок в Entity Framework, и я довольно сильно запутался в том, как сначала определить вещи в коде.
Я бы просто определил в коде эту простую взаимосвязь: у меня есть entity Meal, которая представляет то, что я собираюсь съесть сегодня.
public class Meal
{
public int MealId { get; set; }
public DayOfWeek DayOfWeek { get; set; }
public Recipe Recipe { get; set; }
public int RecipeId { get; set; }
public WeeklySchedule WeeklySchedule { get; set; }
}
Класс recipe, который вы видите, представляет собой рецепт, который я собираюсь использовать для приготовления этого блюда.
Итак, отношение один ко многим. Во многих блюдах может использоваться один и тот же рецепт, но у любого блюда есть только один рецепт
Рецепт класса:
public class Recipe
{
public int RecipeId { get; set; }
public string Name { get; set; }
public ICollection<RecipeItem> RecipeItems { get; set; }
}
И еженедельный график:
public class WeeklySchedule
{
public int WeeklyScheduleId { get; set; }
public int WeekNumber { get; set; }
public List<Meal> Meals { get; set; }
public WeeklySchedule() { }
public WeeklySchedule(int weeknumber)
{
WeekNumber = weeknumber;
Meals = new List<Meal>();
}
}
Когда я создаю модель, я определяю:
modelBuilder.Entity<Recipe>().HasMany(c => c.RecipeItems).WithOne(c => c.Recipe).OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<RecipeItem>().HasMany(c => c.RecipeItemComponents).WithOne(c => c.RecipeItem).OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<WeeklySchedule>().HasMany(c => c.Meals).WithOne(c => c.WeeklySchedule).OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Meal>().HasOne(c => c.Recipe);
Я использую этот код для его хранения:
_context.WeeklySchedules.Add(weeklySchedule);
await _context.SaveChangesAsync();
Моя проблема в том, что когда я пытаюсь сохранить новое блюдо, я получаю сообщение об ошибке:
Исключение SQLException: не удается вставить явное значение для столбца identity в таблице ‘Recipes’, когда для IDENTITY_INSERT установлено значение OFF.
Хотя в моем случае я не хочу создавать рецепт, но я создаю просто блюдо, указывающее на существующий рецепт.
Я думаю, что я создаю модель неправильным способом.
Не могли бы вы помочь мне понять, что к чему?
Комментарии:
1. Не используйте свойства shadow, они только сбивают с толку. Добавить
public int RecipeId { get; set; }
к объекту Meal2. @CamiloTerevinto Я только что добавил RecipeID, перенес, обновил базу данных, но ничего не изменилось
3. Можете ли вы поделиться кодом? Это происходит, если вы пытаетесь использовать несвязанный объект
4. @CamiloTerevinto уверен. Какая часть кода здесь важна?
5. Столько кода, сколько вы считаете уместным для добавления нового блюда, особенно из того источника, откуда берется объект Recipe. (Примечание: самый быстрый ответ: использовать
Meal.RecipeId
вместоMeal.Recipe
)