在不运行SELECT查询的情况下分配一对多

时间:2019-01-24 12:22:30

标签: c# entity-framework

让我们说一个:

class Zoo{
   Id;
   Name;
   List<Animal> Animals;

}
class Animal{
   Id;
   Name;
   ZooId;
}

通常我会

  var zooId=1;
  var animalId=1;
  var animal = db.Animals.FirstOrDefault(x=>x.Id==animalId);
  animal.ZooId=zooId;
  db.SaveChanges();

如果我错了,请纠正我,但是ef.core会先运行Select查询,然后运行更新查询。

有没有一种方法可以编写将产生单个SQL查询的代码,如:

'Update Animal Set ZooId=1 where Id=1' 

(最好使用lambda代码)

谢谢!

1 个答案:

答案 0 :(得分:1)

尝试如下更新。首先通过分配有效的animalId创建对象,并将ZooId设置为您的要求。使用Property(x => x.ZooId).IsModified = true;只会更新ZooId

var animal = new Animal() 
{ 
    Id = 1,
    ZooId = 1
}
db.Animals.Attach(animal).Property(x => x.ZooId).IsModified = true;
db.SaveChanges();

希望此链接对How to update only one field using Entity Framework?有帮助