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();
我有 '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();