EF SaveChanges在更新前是否插入?

时间:2017-05-29 08:53:26

标签: c# entity-framework

我目前使用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会在删除旧收藏之前插入新收藏吗?或者我在这里做错了什么?

0 个答案:

没有答案