2013-05-10 48 views
1

在我的应用程序中,用户可以分配角色。在此设置页面,我有以下代码:外键在创建时更新,但不在编辑时更新

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

这与创建新用户时使用的代码是否相同?或者这只是为了更新? – SOfanatic 2013-05-10 13:16:09

+0

你能提供SaveUsers方法中的代码吗?您正在使用EF还是ADO? – 2013-05-10 13:16:54

+0

@SOfanatic这是在我的管理员用户可以使用的“快速帐户设置”页面中创建和更新用户的相同代码。它适用于创建,但不适用于更新。 – 2013-05-10 13:21:10

回答

1

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

+0

是的,这似乎是一个问题,因为我们不久前升级了我们的EF,所以我不确定我们是否远远落后于时代,或者这是最近发生的变化,但这肯定是一种激怒!我们确实在某些情况下应用了“SetAsModified”(正如我最近的评论所显示的那样),但也许我们错过了必要的一个。谢谢你的帮助! – 2013-05-10 14:03:15