我目前使用Entity Framework SaveChanges收到约束错误。我正在处理具有Parameter
的类ICollection<ParameterScore>
的实例。
实体类看起来像这样
public partial class ParameterScore
{
public int Id { get; set; }
public int ParameterId { get; set; }
public int SortNo { get; set; }
public string CategoryValue { get; set; }
public Nullable<double> RangeMin { get; set; }
public Nullable<double> RangeMax { get; set; }
public Nullable<int> Score { get; set; }
public virtual Parameter Parameter { get; set; }
}
问题在于,最初添加了3个ParameterScores
并将其保存到参数中,例如参数1.这样可以正常工作。
现在,用户将2个新的ParameterScores
添加到参数中。正如您所看到的,ParameterScore
有一个SortNo
,用于对间隔进行排序。因此,一旦添加了新的ParameterScore
,我必须确保SortNo
仍然保证ParameterScores
中的订单。这是使用简单的算法
list = list.OrderBy(r => r.RangeMin).ToList();
foreach (var element in list)
{
element.SortNo = sortNo;
sortNo++;
}
现在我有一个包含所有ParameterScores
的{{1}}列表,其中包含我希望在我的数据库中保留的SortNo
。我将列表转换为集合并将其分配给参数ICollection<ParameterScore>
并调用SaveChanges()
这会导致插入重复的SortNo时出现约束错误。
CONSTRAINT [U_ParameterScore_ParameterId_SortNo] UNIQUE NONCLUSTERED ([ParameterId] ASC, [SortNo] ASC)
因为我不希望多个ParameterScores
相等。
我看到它的方式我将一个新的集合重新分配给参数,该参数不包括重复的SortNo&#39; - 这将导致EF插入所有ParameterScores
并覆盖现有的。
EF会在删除旧收藏之前插入新收藏吗?或者我在这里做错了什么?