Ошибка обновления 1 для многих свойств навигации - PullRequest
0 голосов
/ 05 марта 2019

Простите, но мне действительно нужна помощь.

Мне нужно обновить сущность, у которой есть коллекция другой сущности (отношение 1-ко-многим в Db), но когда я пытаюсь обновитьглавная сущность Я в конечном итоге получаю эту ошибку:

System.Data.SqlClient.SqlException: Невозможно вставить явное значение для столбца идентификаторов в таблице 'CustomProperties', когда для IDENTITY_INSERT установлено значение OFF.

Я использую шаблон проекта "Aspnetboilerplate" и использую их функцию для обновления сущности.

Вот мой "основной" класс / сущность под названием "Макет":

public class Mockup : FullAuditedEntity<int, User>
{
    public string Name { get; set; }
    public string Json { get; set; }
    public int Width { get; set; }
    public int Height { get; set; }
    public string Support { get; set; }
    public string Format { get; set; }
    public ICollection<CustomProperty> CustomProperties { get; set; }
}

Я хочу обновить коллекцию "CustomProperties" здесь выше.

А вот мой класс / сущность Customproperty:

public class CustomProperty : FullAuditedEntity<int>
{
    public int JsonElementId { get; set; }

    public string Value { get; set; }

    public CustomPropertyType Type { get; set; }

    public Mockup Mockup { get; set; }
}

Поскольку я пытаюсь сделать обновление, я могу 'Я действительно не понимаю, почему он пытается сделать «IDENTITY_INSERT» и как это сделать по-другому.Как мне сделать, чтобы моё обновление работало правильно?

Вот пример Json, который я публикую в функции обновления aspnetboilerplate.Он сопоставляется Automapper с сущностью, размещенной выше:

{
    "name":"okok",
    "json":"",
    "width":827,
    "height":1170,
    "support":null,
    "format":null,
    "customProperties":[
    {
    "jsonElementId":949264,
    "value":"150",
    "type":0,
    "id":3335
    },
    {
    "jsonElementId":427781,
    "value":"150",
    "type":0,
    "id":3336
    },
    {
    "jsonElementId":165189,
    "value":"366.99445670195036",
    "type":0,
    "id":3337
    },
    {
    "jsonElementId":110359,
    "value":"150",
    "type":0,
    "id":3338
    },
    {
    "jsonElementId":342044,
    "value":"150",
    "type":0,
    "id":3339
    }
    ],
    "id":8040
    }
}

Когда я делаю это для новой сущности, она создает в Db сущность Mockup и CustomProperties тоже без проблем, но когда я пытаюсь обновитьколлекция (после удаления некоторых пользовательских свойств в коллекции) у меня ошибка.

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Я думаю, что проблема в методе по умолчанию AsyncCrudAppService. Если вы посмотрите на метод обновления: `публичное обновление виртуальной асинхронной задачи (вход TUpdateInput) { CheckUpdatePermission (); * * 1 001

        var entity = await GetEntityByIdAsync(input.Id);

        MapToEntity(input, entity);
        await CurrentUnitOfWork.SaveChangesAsync();

        return MapToEntityDto(entity);
    }`

Сущность загружается без каких-либо включений, поэтому Entity Framework пытается вставить элементы, содержащиеся в вашем свойстве навигации, но они уже существуют, тогда у вас есть ошибка ...

Вы должны найти путь к этому var entity = await GetEntityByIdAsync (input.Id); с включением. Таким образом, вы переопределяете метод add, и он должен работать.

Поддерживаем связь;)

0 голосов
/ 05 марта 2019

проблема в том, что у вас есть пользовательское свойство с:

Я не знаю, как это происходит.

Но JsonElementId, вероятно, настроен как IDENTITY. То есть его значение рассчитывается по БД. Поэтому, если вы предоставляете значение для БД, БД жалуется, за исключением случаев, когда вы SET IDENTITY_INSERT OFF, то есть если вы запрашиваете у БД разрешение на установку значения (здесь не рекомендуется).

Итак, вы должны выяснить, почему ваш CustomProperty:

  • не находится в состоянии Unchanged или
  • получить ключ, отличный от 0.
...