从 /OrchardLocal/Admin/Users 中未显示的另一个数据库添加的用户(通过 SQL 触发器)
Users added (via SQL trigger) from another database not showing in /OrchardLocal/Admin/Users
在我们的会员数据库中,我们有一个在添加新用户时触发的触发器。此触发器将用户相关信息写入我们的 Orchard 数据库(在同一台服务器上)并正确填充以下 tables:
Orchard_Framework_ContentItemRecord
Orchard_Framework_ContentItemVersionRecord
Orchard_Users_UserPartRecord
触发器未填充 Orchard_Roles_UserRolesPartRecord
但为了确保这不是触发器触发后的问题,我将插入记录的 ID 添加到 Orchard_Roles_UserRolesPartRecord
并分配了一个角色 - 问题仍然存在.
问题
当我以管理员用户身份登录并转到 Users
页面时,显示了通过触发器添加的 none 用户。例如,如果通过触发器添加了 1 个管理员用户和 1 个用户,在 Users
页面上我只会看到管理员用户,however,页面上的标签会读作 'Showing 1 - 2 of 2 users'。所以看起来当获取用户时有些东西不满足并且通过触发器添加的用户没有被添加到视图模型。
我已经逐步完成 AdminController
、
上的代码
var users = Services.Query<UserPart, UserPartRecord>();
users
对象将包含 2 个用户,如上。命中此行时:
var results = users.Slice(pager.GetStartIndex(), pager.PageSize).ToList();
results
对象将只有 1 个用户,admin 用户。我猜我在某些 table 中遗漏了一个条目。为了确保我在 Orchard 中创建了一个新用户并在 SQL 服务器分析器中检查了生成的 SQL 并且从我可以看到没有其他 tables 需要填充,但是似乎是这样的。根据我所说的,你能找出我遗漏的任何东西吗?
注:
我还使用 import/export 模块导出用户,下面是两个有问题的用户记录的结果(其中 orchard_test 是通过触发器添加的用户):
<Data>
<User Id="/User.UserName=admin" Status="Published">
<UserPart Email="" EmailStatus="Approved" HashAlgorithm="SHA1" NormalizedUserName="admin" Password="H0+uhIHB0dI2QSPETgqFM9dyRV4=" PasswordFormat="Hashed" PasswordSalt="H4jlZb9da7SJQj6hyQnxBA==" RegistrationStatus="Approved" UserName="admin" />
<UserRolesPart Roles="" />
</User>
<User Id="/User.UserName=orchard_test" Status="Published">
<UserPart Email="orchard_test@test.com" EmailStatus="Approved" HashAlgorithm="SHA1" NormalizedUserName="orchard_test" Password="sbCvRgQj8cRlc7YMAiW17fhTQlfXhZWHoaWyK40/DSY=" PasswordFormat="Hashed" PasswordSalt="PQSlEKDdfcbi04EpyKXfqQ==" RegistrationStatus="Approved" UserName="orchard_test" />
<UserRolesPart Roles="" />
</User>
</Data>
注意:虽然这确实解决了问题,但这并不是@Bertrand 指出的推荐方法。
问题是 Orchard_Users_UserPartRecord.Id 与 Orchard_Framework_ContentItemRecord.Id 的值不同,这是由于触发器中插入的层次结构不正确造成的。
触发器(或任何脚本插入)中的正确顺序是:
- Orchard_Framework_ContentItemRecord
- Orchard_Users_UserPartRecord
- Orchard_Framework_ContentItemVersionRecord
在我们的会员数据库中,我们有一个在添加新用户时触发的触发器。此触发器将用户相关信息写入我们的 Orchard 数据库(在同一台服务器上)并正确填充以下 tables:
Orchard_Framework_ContentItemRecord
Orchard_Framework_ContentItemVersionRecord
Orchard_Users_UserPartRecord
触发器未填充 Orchard_Roles_UserRolesPartRecord
但为了确保这不是触发器触发后的问题,我将插入记录的 ID 添加到 Orchard_Roles_UserRolesPartRecord
并分配了一个角色 - 问题仍然存在.
问题
当我以管理员用户身份登录并转到 Users
页面时,显示了通过触发器添加的 none 用户。例如,如果通过触发器添加了 1 个管理员用户和 1 个用户,在 Users
页面上我只会看到管理员用户,however,页面上的标签会读作 'Showing 1 - 2 of 2 users'。所以看起来当获取用户时有些东西不满足并且通过触发器添加的用户没有被添加到视图模型。
我已经逐步完成 AdminController
、
var users = Services.Query<UserPart, UserPartRecord>();
users
对象将包含 2 个用户,如上。命中此行时:
var results = users.Slice(pager.GetStartIndex(), pager.PageSize).ToList();
results
对象将只有 1 个用户,admin 用户。我猜我在某些 table 中遗漏了一个条目。为了确保我在 Orchard 中创建了一个新用户并在 SQL 服务器分析器中检查了生成的 SQL 并且从我可以看到没有其他 tables 需要填充,但是似乎是这样的。根据我所说的,你能找出我遗漏的任何东西吗?
注:
我还使用 import/export 模块导出用户,下面是两个有问题的用户记录的结果(其中 orchard_test 是通过触发器添加的用户):
<Data>
<User Id="/User.UserName=admin" Status="Published">
<UserPart Email="" EmailStatus="Approved" HashAlgorithm="SHA1" NormalizedUserName="admin" Password="H0+uhIHB0dI2QSPETgqFM9dyRV4=" PasswordFormat="Hashed" PasswordSalt="H4jlZb9da7SJQj6hyQnxBA==" RegistrationStatus="Approved" UserName="admin" />
<UserRolesPart Roles="" />
</User>
<User Id="/User.UserName=orchard_test" Status="Published">
<UserPart Email="orchard_test@test.com" EmailStatus="Approved" HashAlgorithm="SHA1" NormalizedUserName="orchard_test" Password="sbCvRgQj8cRlc7YMAiW17fhTQlfXhZWHoaWyK40/DSY=" PasswordFormat="Hashed" PasswordSalt="PQSlEKDdfcbi04EpyKXfqQ==" RegistrationStatus="Approved" UserName="orchard_test" />
<UserRolesPart Roles="" />
</User>
</Data>
注意:虽然这确实解决了问题,但这并不是@Bertrand 指出的推荐方法。
问题是 Orchard_Users_UserPartRecord.Id 与 Orchard_Framework_ContentItemRecord.Id 的值不同,这是由于触发器中插入的层次结构不正确造成的。
触发器(或任何脚本插入)中的正确顺序是:
- Orchard_Framework_ContentItemRecord
- Orchard_Users_UserPartRecord
- Orchard_Framework_ContentItemVersionRecord