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
,