【问题标题】:Navigation Property Not being Added In Entity Framework 7 using vNext使用 vNext 在 Entity Framework 7 中未添加导航属性
【发布时间】:2015-09-17 00:26:42
【问题描述】:
public void AddMeal(MealModel mealModel)
    {
        using (var context enter code here= new HealthContext())
        {
            var meal = new Meal
            {
                MealNumber = mealModel.MealNumber,
                MealEntries = new List<MealEntry> { new MealEntry { FoodId = 1, MealEntryNumber = 1, Calories = 250, MealId = 1 } },
                DayId = mealModel.Date
            };
            context.Meals.Add(meal);
            context.SaveChanges();
        }
    }

我正在使用带有代码优先迁移的 Entity Framework 7,并正在尝试向数据库添加新的“膳食”。

使用上面列出的 2 列成功添加了“Meal”,但未添加“MealEntries”。 MealEntries 是 MealEntry 的 ICollection,用作存在于“Meal”实体上的导航属性。

在这个代码示例中,我什至对新的“列表”进行了硬编码,以查看这是否可行,但即使这样也没有被添加到数据库中。

我在调试代码时注意到的一件奇怪的事情是,在单步执行“添加”命令后,EF 将所有主键和/或外键设置为负值,除了每个“ MealEntry 列表中的“MealEntry”。这几乎就像 EF 没有跟踪此列表,因此不会更新它。

当我添加“餐食”时,我需要做什么才能将列表的导航属性“批量”一一添加到数据库中的相应表中?

【问题讨论】:

    标签: c# asp.net asp.net-core entity-framework-core


    【解决方案1】:

    在 EntityFramework 7 中,此时不会自动添加子成员。您必须自己显式添加它们。

    context.Meals.Add(meal);
    context.MealEntries.AddRange(meal.MealEntries);
    context.SaveChanges();
    

    相关github issue讨论这个。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多