我正在使用Entity Framework 2.0.1,我遇到的问题是在2.x版的EF版本中运行良好。
如果我选择一个对象并在选择中包含一个属性,并且我想更新该属性,我必须更新对象引用,而不是引用EF的对象以识别并保存更改。
这是一个例子。 Ranking.RankTypeId是RankType.RankTypeId的外键。我选择并包含RankType属性。
public Ranking GetRankingById(int rankingId)
{
using (var context = new BestNetDatabaseContext())
{
var rankings = context.Rankings.AsQueryable();
var foundRanking = rankings.Include(x => x.RankType).FirstOrDefault(x => x.RankingId == rankingId);
if (foundRanking == null)
throw new RankingNotFoundException();
return foundRanking;
}
}
如果我想更新Ranking.RankType,我必须选择并获取RankType对象的实例并设置它。
ranking.RankType = _rankTypeService.GetRankTypeById(1);
我想做的事情(多年来一直在做)只是设置了Id。
ranking.RankTypeId = 1;
我将对象附加到上下文并在保存更改之前将状态设置为脏(此代码在以前版本的EF CORE中有效)。
public void UpdateRanking(Ranking ranking)
{
using (var context = new MyDatabaseContext())
{
context.Rankings.Attach(ranking);
context.Entry(ranking).State = EntityState.Modified;
//ranking.RankTypeId IS correctly set to 1 at this point
context.SaveChanges();
}
}
如果我不使用include语句,我可以设置Id和EF将识别更改并更新数据库。当我包含属性时,它似乎忽略了更新Id。想法?