外键在创建时更新,而不是在编辑时更新

本文关键字:更新 编辑 创建 | 更新日期: 2023-09-27 18:12:56

在我的应用程序中,用户可以被分配角色。在设置页面中,我有以下代码:

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

有没有人可能想到任何原因,为什么这将正确地工作在创建,而不是在编辑?非常感谢提前,我将更愿意澄清任何问题。

外键在创建时更新,而不是在编辑时更新

一个类似的问题驱使我选择NHibernate而不是EF,因为它可以更新孩子和孙子集合(可能更深层次,但我没有尝试过)。像@JhonatasKleinkauff提到的答案那样调整ObjectState似乎是EF中唯一的答案,但在我们的情况下并不令人满意。这似乎只有在检索和保存父对象之间断开与ObjectContext的连接时才会发生。