实体框架 - 删除多对多关系错误

时间:2011-06-07 12:56:47

标签: c# entity-framework many-to-many

我有3张桌子:

SocialNetwork
  IdSocialNetwork (PK) (Not Null)
  Name (Not Null)
  Active (Not Null)

User
  IdUser (PK) (Not Null)
  Name (Not Null)

SocialNetworkXUser
  IdSocialNetworkXUser (PK) (Not Null)
  IdSocialNetwork (Not Null)
  IdUser (Not Null)
  Active (Not Null)

我需要更新一个用户的社交网络。首先,我有2个社交网络(Facebook和Twitter),现在我取消选中Twitter。因此,我必须删除SocialNetworkXUser for Twitter中的记录。

我使用工作单元来管理对Entity Framework的访问。

我的代码是这样的:

foreach (DtoSharedSocialNetwork socialNetworkXUser in dtoUserSocialNetworksPreferences.SharedSocialNetworks)
{
//Check is exist
SocialNetworkXUser temp = (from sxu in actualUser.SocialNetworkXUsers
                            where sxu.IdSocialNetwork == socialNetworkXUser.IdSocialNetwork
                            select sxu).FirstOrDefault();

//If Checked
if (socialNetworkXUser.IsShared)
  {
    //If Not exist
    if (temp == null)
       {
        SocialNetworkXUser newSocialNetworkXUser = new SocialNetworkXUser();

        newSocialNetworkXUser.IdSocialNetwork = socialNetworkXUser.IdSocialNetwork;
        newSocialNetworkXUser.IdUser = actualUser.IdUser;

        actualUser.SocialNetworkXUsers.Add(newSocialNetworkXUser);
       }
   }
else
  {//If Not Checked

   //If Exist, Remove!
   if (existe != null)
     {
     actualUser.SocialNetworkXUsers.Remove(existe);                        
     }
  }

然后,我使用我的工作统一来更新用户

UnitOfWork unitOfWork = _userRepository.UnitOfWork;

_userRepository.Modify(user);

unitOfWork.CommitAndRefreshChanges();

当执行CommitAndRefreshChanges时,请给我这个错误:

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

我尝试了很多东西,我无法解决这个问题。在我的系统的其他部分,我也这样做,我没有这个错误。

有人能给我一个帮助吗?

抱歉我的英语不好

谢谢!

0 个答案:

没有答案