.NET MVC-当再次保存父对象时,嵌套对象将被复制

本文关键字:对象 嵌套 复制 MVC- 保存 NET | 更新日期: 2023-09-27 18:24:34

我有一个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();

什么可以防止我的子对象被复制?

.NET MVC-当再次保存父对象时,嵌套对象将被复制

您的子对象是由DbContext的另一个实例获取的,因此实体框架无法跟踪它们,也不知道这些实体已经存在。

您可以在Recipe对象上填写外键,而不是导航属性:

dbObj.CookingTimeId = recipe.CookingTimeId