FullAuditedEntity、ObjectMapper:创建新条目或删除时 CreatorUserId 为空

FullAuditedEntity, ObjectMapper: CreatorUserId Null when Creating New Entry or Deleting

我一直在通过 API 将数据发布到 完整审计实体 。因为它是 FullAuditedEntity,所以它应该使用 creatorId、creationTime 和其他几个列值自动创建。但是当我检查数据库时,CreatorUserIDnull,即使 CreationTime 在那里。它 应该是 1 因为我用默认管理员发帖 。此外,当我删除行时,也会发生同样的情况:我只能看到 DeletionTime 而看不到 DeleterUserId.

下面是 API 端点捕获的数据,我可以使用断点查看:

我尝试了两种对象映射方法创建了outputoutput2但是它们都给出了相同的null CreatorUserId 的价值。按理说,CreatorUserIdCreationTime 到这个阶段都应该有值了。

        [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);
        }

我的对象映射函数有什么问题吗?

问题出在默认管理员上,因为它没有租户。

我从 另一个租户创建了一个新用户 并使用新用户的凭据创建了 post 数据。然后我 post 通过 在 post 正文 中省略 tenantId 的数据。而且效果很好。

我曾经在 默认管理员 (主机租户)的 post 数据对象中指定 tenantId。如果我 不指定 tenantId 或输入 0,它会给出 Server Internal Error: 500。因此,我必须 在 post 正文对象 中指定 tenantId。我认为正因为如此,它以某种方式混淆了 API 内的映射,因为 default Admin 没有租户 .

你的对象映射函数没有问题。

I experimented with two Object Mapping Methods... By right, both CreatorUserId and CreationTime should have values by this stage.

CreatorUserIdCreationTime 只有在调用 SaveChanges() 后才有值。

I have to put [TenantId] manually in the JSON post object, and it shows in the database.

你不应该那样做。 CreatorUserIdonly set if the entity belongs to the current tenant.

I can see UserId which is 1 in breakpoint. Somehow it gets ignored during mapping.

以 "Default" 租户管理员身份创建实体的正确方法是以租户管理员身份登录。

UserId = 1 表示您以主机管理员身份登录。 "Default" 租户管理员有 UserId = 2.

If I don't specify tenantId or put 0, it gives Server Internal Error: 500.

如果您希望主机创建 Rule,请确保它实现 IMayHaveTenant 而不是 IMustHaveTenant