LINQ/Code 第一:如何从父对象中删除子对象的引用?

LINQ/Code first: how do I delete a child object's reference from the parent object?

我有 'UserProfile' 和 'Executive' 对象在 1:1 关系上使用存储库模式。 UserProfiles是系统的required/part,执行者基于UserProfiles。

这是我的用户资料:(相关部分)

public int? ExecutiveId { get; set; }
[ForeignKey("ExecutiveId")]
public virtual Executive Executive { get; set; }

这是我的主管:(相关部分)

public int UserProfileId { get; set; }
[ForeignKey("UserProfileId")]
public virtual UserProfile UserProfile { get; set; }

这是我的 FluentApi:(因为执行是可选的并且需要 UserProfile)

modelBuilder.Entity<Executive>()
            .HasRequired(x => x.UserProfile)
            .WithOptional(s => s.Executive)
            .WillCascadeOnDelete(false); <-- I've tried 'true' here as well

现在,当我尝试删除它并查看 SQL Mgr 时,我看到我删除的特定执行人员的 UserProfile 仍然是一个整数,而不是我预期的 NULL...这是我的代码删除:

 var executive = _executiveRepository.GetExecutiveById(id);
        // remove pic/content
        _contentRepository.DeleteContent(executive.ProfilePictureContent.ContentGuid);
        // remove mappings
        _executiveSectionMappingRepository.DeleteExecutiveSectionMappingRange(executive.ExecutiveSectionMappings);
        // remove executive
        _executiveRepository.DeleteExecutive(id);
        // remove reference from User also as EF isn't doing this the way it's setup now.
        var u = _userRepository
            .GetUserProfiles()
            .FirstOrDefault(x => x.ExecutiveId == executive.UserProfileId);
        if (u != null)
        {
            u.ExecutiveId = null;<-- these don't work !!
            u.Executive = null;  <-- not working
        }
        // save
        _contentRepository.Save();
        _executiveSectionMappingRepository.Save();
        _executiveRepository.Save();
        _userRepository.Save();

我错过了什么?

我没有先使用代码,但看起来你保存了你的存储库,但没有设置要修改的实体。

这意味着您正在更新内存中的 userProfile 对象,但没有将您的存储库设置为使用该对象。 {除非我弄错了 Code First},但您似乎需要按照以下方式做一些事情:

_userRepository.UpdateExistingUser(u);

然后调用_userRepository.Save();