Сохранение сущностей, связанных внешним ключом (запрос POST / PUT) в Entity Framework, ASP.NET-MVC - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть два класса, которые связаны отношением один ко многим.Категория может иметь несколько Продуктов, у Продукта может быть только одна Категория.

Модели

Models / Category.cs:

namespace Projeto.Models
{
    public class Category
    {
        public int CategoryId { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Product> Products { get ; set; }
        public ICollection<CategoryCategory> CategoryParent { get; set; } 
        public ICollection<CategoryCategory> CategoryChild { get; set; } 
    }
}

Models / Product.cs:

namespace Projeto.Models
{
    public class Product
    {
        public int ProductId { get; set; }
        public string Name { get; set; }

        public virtual Category Category { get; set; }
}

Проблема

Когда я выполняю POST или PUT, пытаясь обновить «категорию» данного продукта, возвращается следующая ошибка:

Тело запроса(HttpPut):

{
    "productId": 1,
    "name": "testing",
    "category": 1
}

Ответ:

{
    "category": [
        "Error converting value 1 to type 'Projeto.Models.Category'. Path 'category', line 4, position 15."
    ]
}

Возможные решения

Я пробовал несколько комбинаций «виртуального» типа данных, который яseen решает эту проблему, но никогда не сможет исправить ошибку и заставить операции CRUD функционировать должным образом.Я также попробовал аннотацию данных [ForeignKey], опять же без удачи:

public int CategoryMetaID;
[ForeignKey("CategoryMetaID")]
public virtual Category Category { get; set; }

Правда, я не очень разбираюсь в C #, ASP.NET MVC или самой Entity Framework, так что это можетбыть действительно ошибкой новичка.Однако мне удалось настроить работающий API, который может устанавливать POST и UPDATE отношения «многие ко многим» («Product is Product»), но, похоже, не могу решить эту проблему отношения «один ко многим» с внешним ключом.

Любое просвещение будет с благодарностью.Заранее спасибо!

1 Ответ

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

ясно, что в следующих

{
"productId": 1,
"name": "testing",
"category": 1
}

"категория": 1 не может привязаться к объекту типа Категория

public virtual Category Category { get; set; }

Так что исправитьэта ошибка, вы должны знать, что веб-API использует json fomatter для анализа входящих объектов в объекты C # POCO.это библиотека Json.Net

, поэтому вы можете пометить это свойство, чтобы игнорировать его при связывании, используя следующий

[JsonIgnore]
public virtual Category Category { get; set; }

. Зашифрованный способ сделать это - указать следующий класс продукта - внешний ключ.и добавьте его в класс Категория

Изменить класс продукта и добавьте

public int CategoryId { get; set; }
[JsonIgnore]
public virtual Category Category { get; set; }

Измените класс категории и добавьте

[ForeignKey("CategoryId")]
public virtual ICollection<Product> Products { get ; set; }

Я думаю, это поможет вам.пожалуйста, попробуйте

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