УНИКАЛЬНОЕ исключение ограничения при вставке нового элемента - PullRequest
0 голосов
/ 26 февраля 2020

Я использую aspnetbooilerplate fw, и у меня есть следующий код, который я пытаюсь проверить в модульном тесте.

Вот мои данные:

[Table("MyItems")]
public class MyItem: FullAuditedEntity<int>
{
    public  string Name { get; set; }

    public  string Description { get; set; }

    public  Guid Guid { get; set; }

    public User User { get; set; }

}

, и пользователь стандартный:

 public class User : AbpUser<User>
    {...
}

Также класс User не имеет ссылки на MyItem, я не изменил его (оставьте как есть). Таким образом, отношение 1 ко многим, один пользователь (AbpUser) может иметь много MyItems. А вот мой код:

 public async Task<MyItem> CreateMyItemAsync([NotNull] MyItemDto itemDto)
    {
        if (itemDto == null) throw new ArgumentNullException(nameof(itemDto));

        Debug.Assert(AbpSession.UserId != null, "AbpSession.UserId != null");

        var myItem = ObjectMapper.Map<MyItem>(itemDto);
        var user  = await GetCurrentUserAsync();

         myItem.User = user;
        var result = await _MyItemRepository.InsertAsync(MyItem).ConfigureAwait(false);
        return result;
    }

этот код выдает:

Microsoft.EntityFrameworkCore.DbUpdateException: при обновлении записей произошла ошибка. Смотрите внутреннее исключение для деталей. ---- Microsoft.Data.Sqlite.SqliteException: ошибка SQLite 19: «Не удалось выполнить ограничение UNIQUE: AbpUsers.Id». в

Я полагаю, потому что он не может правильно обрабатывать пользователя, вместо того, чтобы присоединять его к текущему контексту БД, он пытается добавить пользователя в объект myitem, и, конечно, этот пользователь уже существует. Все работает отлично, если я использую Id (а именно UserId, который ссылается на поле User Id). Но я хочу вместо этого использовать ссылку на объект.

Что я делаю не так? Как я могу прикрепить пользователя к контексту БД MyItemRepository? Могут ли быть проблемы, если я опишу отношения 1 ко многим только на стороне MyItem?

Заранее спасибо.

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