Ошибка «Произошло нарушение ограничения ссылочной целостности» при попытке обновления в Entity Framework - PullRequest
0 голосов
/ 20 декабря 2018

Когда я пытаюсь обновить сущность, я получаю сообщение об ошибке:

System.InvalidOperationException: 'Произошло нарушение ограничения ссылочной целостности: значение (я) свойства' Recipe.Id'на одном конце отношения не совпадают значения свойства (ов)' Ingredient.RecipeId 'на другом конце.'

Контроллер:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(RecipeEditViewModel viewModel)
{
    if (!ModelState.IsValid)
    {
        return View(viewModel);
    }

    var recipe = new Recipe()
    {
        Id = viewModel.Id,
        Name = viewModel.Name,
        AboutDish = viewModel.AboutDish,
        Ingredients = viewModel.Ingredients,
        Directions = viewModel.Directions
    };

    if (viewModel.File != null)
    {
        // upload file logic   
    }

    _context.Entry(recipe).State = EntityState.Modified; //**Error here**
    _context.SaveChanges();

    return RedirectToAction("Index", "Home");
}

Классы моделей:

//recipe.cs
public class Recipe
{
    public int Id { get; set; }

    // Name, etc

    [Required]
    public virtual ICollection<Ingredient> Ingredients { get; set; }
}

// ingredient.cs
public class Ingredient
{
    public int Id { get; set; }

    // Name, etc...

    public int RecipeId { get; set; }

    [ForeignKey(nameof(RecipeId))]
    public virtual Recipe Recipe { get; set; }
}

Просмотр модели:

// RecipeEditViewModel.cs
public class RecipeEditViewModel
{
    public int Id { get; set; }

    // Name, etc...

    public ICollection<Ingredient> Ingredients { get; set; }
}

1 Ответ

0 голосов
/ 20 декабря 2018

Редактировать:

Recipe.Id и Ingredient.RecipeId имеют разные значения, которые вызывают

«Нарушение ограничения ссылочной целостности»

вам нужноисправить ваши данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...