2015-09-17 28 views
2
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進行代碼優先遷移,並試圖向數據庫添加新的「Meal」。未在實體框架7中添加導航屬性使用vNext

的「膳食」與上面列出的2列添加成功,但「MealEntries」不添加。 MealEntries是MealEntry的ICollection,用作「膳食」實體上存在的導航屬性。

在此代碼示例我甚至硬編碼的新的「目錄」,看看是否會工作,但即使沒有被添加到數據庫中。

我在調試代碼時注意到了一件奇怪的事情,那就是在單步執行「Add」命令後,所有主鍵和/或外鍵都被EF設置爲負值,除了各自的「Id」 「MealEntry」在「MealEntries」列表中,它幾乎就像EF沒有跟蹤這個列表並且因此不會更新它。

我需要做什麼才能讓列表的導航屬性成爲「批量」添加1 1到數據庫中的其各自的表時我加一個「餐」?

回答

1

在7的EntityFramework,在這個時間點上,子成員不會自動添加。你必須明確地自行添加。

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

相關github issue討論此事。

+0

謝謝!這比我提出的解決方法要優雅得多。 – Sharpiro

+0

這將在下一個測試版中修復。請參閱https://github.com/aspnet/EntityFramework/pull/2979 – natemcmaster