我有以下课程:
public class Test
{
...
public ISet<CategoryAssignment> Categories { get; } = new HashSet<CategoryAssignment>();
public void LinkWithCategory(Category category)
{
Categories.Add(new CategoryAssignment(category, this));
}
public void RemoveCategoryLink(int categoryId)
{
var categoryAssignment = Categories.FirstOrDefault(c => c.CategoryId == categoryId);
Categories.Remove(categoryAssignment);
}
}
但是在调用RemoveCategoryLink()
方法时会出现以下错误:
因为一个或多个关系无法改变 外键属性是不可为空的。当对a进行更改时 关系,相关的外键属性设置为空值。 如果外键不支持空值,则为新关系 必须定义外键属性必须另外分配 必须删除非空值或不相关的对象。
为什么CategoryAssignment类中的外键必须可以为空? 如何从ISet集合中删除项目?
由于
答案 0 :(得分:0)
虽然我同意MethodMan这个问题似乎与Masaud提出的问题重复,但我觉得您的以下代码存在问题:
public static boolean useLoop(String[] arr, String targetValue) {
for(String s: arr){
if(s.equals(targetValue))
return true;
}
return false;
}
问题:FirstOrDefault - 如果未找到匹配项,此方法将返回第一个匹配项或默认值(在您的情况下可以为null)。因此,如果发生这种情况,您的categoryAssignment对象可能为null。 在那种情况下,以下声明:
public void RemoveCategoryLink(int categoryId)
{
var categoryAssignment = Categories.FirstOrDefault(c => c.CategoryId == categoryId);
Categories.Remove(categoryAssignment);
}
会抛出错误。我并不是说你得到的错误来自于此,但值得尝试修改你的代码:
Categories.Remove(categoryAssignment);