使用实体框架核心更新数据库中的列

时间:2019-03-03 14:30:04

标签: c# database entity-framework

我在更新数据库中的记录时遇到一些问题。 我有一个代码,可以在DB中添加数据

foreach (var todatabase in InitialAllWeights)
{
    if (sd.stationSeasonNNcoefs.Count(e => e.Hours == todatabase.Hours && e.SeasonId == todatabase.SeasonId && e.StationId == todatabase.StationId) == 0)
    {
         sd.Add(todatabase);
    }
    else
    {

    }
}
sd.SaveChanges();

,如果在数据库中没有初始计数,则添加当前数据。对于我的任务,如果计数为空,则需要添加数据,如果计数为满,则需要更新数据,但是如果计数为满,我必须仅更新一列WeightsSeason

public class stationSeasonNNcoef
{
    public int stationSeasonNNcoefID { get; set; }
    public int StationId { get; set; }
    public int SeasonId { get; set; }
    public string WeightsSeason { get; set; }
    public int Hours { get; set; }

}

和另一列(SeasonId, StationId, Hours)必须保持不变。

1 个答案:

答案 0 :(得分:0)

如果这是您唯一确定要更新的潜在记录的方式(或在未找到的情况下插入):

e.Hours == todatabase.Hours && e.SeasonId == todatabase.SeasonId && e.StationId == todatabase.StationId

然后首先尝试获取该记录。如果找到,请对其进行更新。如果不是,则将其插入。也许是这样的:

var record = sd.stationSeasonNNcoefs.SingleOrDefault(e => e.Hours == todatabase.Hours && e.SeasonId == todatabase.SeasonId && e.StationId == todatabase.StationId);
if (record == null)
{
    sd.Add(todatabase);
}
else
{
    record.WeightsSeason = todatabase.WeightsSeason;
}
sd.SaveChanges();

SingleOrDefault的调用将返回一个匹配的记录,或者如果找不到匹配的记录,则返回null。 (注意:如果发现一个以上,它将引发异常。)