在我的应用程序中,可以为用户分配角色。在此设置页面中,我有以下代码:
foreach (string userRole in roleArray)
{
OrganizationRole orgRole = signedUpOrg.Roles.FirstOrDefault(target => target.Name == userRole && target.OrganizationId == signedUpOrg.OrganizationId);
if (orgRole != null)
{
OrganizationUser_OrganizationRole existingUserRole = orgRole.OrganizationUser_OrganizationRole.FirstOrDefault(target => target.Organization_User.User.UserId == orgUser.User.UserId &&
target.OrganizationRole.Name == userRole &&
target.OrganizationRole.OrganizationId == signedUpOrg.OrganizationId);
if (existingUserRole == null || orgUser.User.UserId == 0) // new user role to new users or existing users with new roles
{
orgRole.OrganizationUser_OrganizationRole.Add(new OrganizationUser_OrganizationRole
{
Organization_User = orgUser,
OrganizationRole = orgRole
});
}
}
}
通过这种方式,我们可以遍历要分配的角色并将其保存在数据库中。这对于创建用户及其角色非常有效,但在编辑时没有任何变化。代码似乎在所有关键点都受到正确数据(角色等)的影响,但数据库或前端没有反射。
此代码位于名为CommonUtilities的类中的SaveUsers方法中,并在AdministrationController中使用以下代码调用:
CommonUtilities.SaveUsers(viewModel);
任何人都可以想到为什么这会在创作时正常工作但在编辑时不能正常工作?非常感谢,我会非常愿意澄清任何一点。
答案 0 :(得分:1)
一个类似的问题促使我选择NHibernate而不是EF,因为它可以更新儿童和孙子系列(可能更深层次,但我没有尝试过)。调整ObjectState就像@JhonatasKleinkauff提到的答案似乎是EF的唯一答案,但在我们的案例中并不令人满意。这似乎只有在检索和保存父对象之间断开ObjectContext时才会发生。