我有一个Object,它有3个不同的相关/嵌套对象。我可以通过表格编辑它们。 我现在要做的是,当我回到编辑对象时,我希望能够编辑那些子对象 - 这非常有效。除此之外,当我尝试保存它时 - 子对象只是被复制了。
因此,举个例子,我为其中一个子对象提供了以下EditorTemplate:
@model Vineyard.Core.Entities.UsedIngredient
<div class="usedIngredient form-inline">
@if (Model.UsedIngredientId != 0)
{
@Html.HiddenFor(u => u.UsedIngredientId)
}
@if (Model.RecipeId != 0)
{
@Html.HiddenFor(u => u.RecipeId)
}
@Html.LabelFor(r => r.Amount)
@Html.TextBoxFor(r => r.Amount)
@Html.LabelFor(r => r.IngredientName, "Name")
@Html.TextBoxFor(r => r.IngredientName)
@Html.HiddenFor(r => r.Delete, new {@class = "mark-for-delete"})
@Html.LinkToRemoveNestedForm("Remove", "div.usedIngredient", "input.mark-for-delete")
</div>
我将这样的实体保存到DB:
if (recipe.RecipeId == 0)
{
context.Recipes.Add(recipe);
}
else
{
Recipe dbObj = context.Recipes.Find(recipe.RecipeId);
dbObj.Name = recipe.Name;
dbObj.Subtitle = recipe.Subtitle;
dbObj.Instructions = recipe.Instructions;
dbObj.Serving = recipe.Serving;
dbObj.PrepTime = recipe.PrepTime;
dbObj.CookingTime = recipe.CookingTime;
dbObj.RecipeImages = recipe.RecipeImages;
dbObj.UsedIngredients = recipe.UsedIngredients;
dbObj.Pairings = recipe.Pairings;
}
context.SaveChanges();
什么会阻止我的子对象被复制?
答案 0 :(得分:0)
您的子对象是由DbContext
的另一个实例提取的,因此实体框架无法跟踪它们,并且它不知道实体已经存在。
您可以做的是填写Recipe
对象上的外键而不是导航属性:
dbObj.CookingTimeId = recipe.CookingTimeId