我有' UserProfile'和'执行'使用Repository模式的1:1关系上的对象。 UserProfiles是系统的必需/部分,管理人员基于UserProfiles。
这是我的UserProfile :(相关部分)
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();
答案 0 :(得分:2)
我没有先使用Code,但它看起来像是在保存您的存储库,而不是设置要修改的实体。
这意味着您在内存中更新了userProfile的对象,但没有将您的repo设置为使用该对象。 {除非我错误地使用Code First},但似乎你需要做一些事情:
_userRepository.UpdateExistingUser(u);
然后调用_userRepository.Save();