FullAuditedEntity, ObjectMapper: CreatorUserId Null при создании новой записи или удалении

Я публиковал данные в полностью аудируемую сущность через API. Как оно есть FullAuditedEntity, он должен автоматически создаваться с помощью creatorId, creationTime и пары других значений столбца. Но когда я проверил в базе данных, CreatorUserID является null даже если CreationTime есть. Должно быть 1 потому что я написал с администратором по умолчанию. Кроме того, когда я удаляю строки, происходит то же самое: я вижу только DeletionTime но нет DeleterUserId,

Ниже приведены данные, полученные конечными точками API, которые я вижу с помощью точек останова:

введите описание изображения здесь

Я экспериментировал с созданием двух методов сопоставления объектов output а также output2 но оба они дают одно и то же null значение для CreatorUserId, По праву оба CreatorUserId а также CreationTime должен иметь значения на этом этапе.

        [AbpAuthorize]
        public async Task<Rule> CreateAsync(CreateRuleInput input)
        {
            Rule output = Mapper.Map<CreateRuleInput, Rule>(input);
            Rule output2 = ObjectMapper.Map< Rule>(input);
            return await _ruleManager.Create(output);
        }

Что-то не так с моими функциями отображения объектов?

2 ответа

Решение

Проблема с администратором по умолчанию, потому что у него нет арендатора.

От другого арендатора я создал нового пользователя и разместил данные с использованием учетных данных нового пользователя. Затем я публикую данные, оставив вне tenantId в теле поста. И это работает просто отлично.

Я использовал, чтобы указать tenantId в объекте данных post для администратора по умолчанию (Host tenant). Если я не укажу tenantId или положить 0 , это дает Server Internal Error: 500, Итак, я должен указать tenantId в объекте post post. Я думаю, что из-за этого он каким-то образом портится с отображениями внутри API, потому что у администратора по умолчанию нет арендатора.

В ваших функциях отображения объектов нет ничего плохого.

Я экспериментировал с двумя методами сопоставления объектов... По праву, и CreatorUserId, и CreationTime должны иметь значения на этом этапе.

CreatorUserId а также CreationTime иметь только значения после SaveChanges() называется.

Я должен поместить [TenantId] вручную в объект сообщения JSON, и он отображается в базе данных.

Вы не должны этого делать. CreatorUserId устанавливается только если объект принадлежит текущему арендатору.

Я вижу UserId, который равен 1 в точке останова. Каким-то образом это игнорируется во время отображения.

Правильный способ создания сущности в качестве администратора клиента по умолчанию - войти в систему как администратор клиента.

UserId = 1 означает, что вы вошли как администратор хоста. Администратор клиента по умолчанию имеет UserId = 2,

Если я не укажу tenantId или не укажу 0, это выдаст Внутреннюю ошибку сервера: 500.

Если вы хотите, чтобы хост создал Ruleубедитесь, что он реализует IMayHaveTenant не IMustHaveTenant,

Другие вопросы по тегам