EntityFramework + ASP WebAPI + модель SelfReference

1

Я пишу простой проект базы данных с использованием Entity Framework и ASP WebAPI.

Я борюсь с созданием модели, в которой есть Self-Reference.

Подобно:

public class ProductCategory
{
    [Key]
    public int CategoryID { get; set; }

    public string CategoryName { get; set; }
    public ProductCategory ParentCategory { get; set; }
}

Я создал API, и я хотел бы создать новую ProductCategory или, если это возможно, весь ссылочный путь категорий ex:

  • Категория 1
    • Категория 1.1
      • Категория 1.1.1

Кроме того, когда я собираюсь помочь странице, он показывает, что Object graph for type contains cycles and cannot be serialized if reference tracking is disabled. ошибок Object graph for type contains cycles and cannot be serialized if reference tracking is disabled.

Чтобы исправить это, я обнаружил, что мне нужно добавить [DataContract(IsReference = true)] в класс ProductCategory, но я до сих пор не знаю, как использовать POST для создания нового объекта (графа объектов)

Может ли кто-нибудь помочь мне в этом?

EDIT: На данный момент я пробовал даже простой метод POST (с CategoryName):

{
    "CategoryName":"test"
}

но это возвращает 500 ошибок:

Project.Models.ProductCategory_ParentCategory:: Multiplicity conflicts with the referential constraint in Role 'ProductCategory_ParentCategory_Target' in relationship 'ProductCategory_ParentCategory'. Because all of the properties in the Dependent Role are non-nullable, multiplicity of the Principal Role must be '1'.

ProductCategory_ParentCategory_Source:: Multiplicity is not valid in Role 'ProductCategory_ParentCategory_Source' in relationship 'ProductCategory_ParentCategory'. Because the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must be '1'

Такая же проблема заключается в том, что я пытаюсь определить другие свойства. Но он должен работать с понятным набором свойств "CategoryName".

  • 0
    Что вы пробовали? Где вы застряли / почему ваш код не работает? Разместите свой код.
  • 0
    вы можете увидеть это в редактировании
Показать ещё 3 комментария
Теги:
entity-framework
asp.net-web-api

1 ответ

3
Лучший ответ

Вам нужно настроить нулевой внешний ключ, потому что отношение EF, выводимое по соглашению, подразумевает, что каждая запись имеет родителя, что, очевидно, невозможно, поскольку какой-то элемент должен быть корнем. Попробуйте следующее:

public class ProductCategory
{
    [Key]
    public int CategoryID { get; set; }

    [ForeignKey("ParentCategory")]
    public int? ParentCategoryId {get;set;}

    public string CategoryName { get; set; }
    public ProductCategory ParentCategory { get; set; }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню