EF核心关系误解

时间:2019-04-24 23:03:29

标签: c# entity-framework-core

我对Entity Framework还是很陌生,对于如何首先定义事物代码我感到很困惑。

我只想在代码中定义这种简单的关系:我有一个实体餐,代表我今天要吃的东西。

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; }
}

您看到的班级食谱代表了我将用来做饭的食谱。 因此,这种关系是一对多的。许多食物可以使用相同的食谱,但是任何一餐只有一个食谱

班级食谱:

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_INSERT设置为OFF时,表“食谱”。

即使在我的情况下,我也不想创建食谱,但我只是在创建一顿指向现有食谱的膳食。

我认为我以错误的方式创建了模型。

您能帮助我理解什么吗?

0 个答案:

没有答案