0

달성하고자하는 것은 Db에서 엔티티의 특정 속성 만 업데이트하는 것입니다. (UPDATE Foo Set Status = 'kool'WHERE ID = 99와 같은 것을 모방합니다.) 이 예제에서 Db의 열 하나만 업데이트하도록 EF를 적용하는 방법은 무엇입니까?

나는 이것을 시도 :

public void SetFooStatus(Foo foo) 
      { 

       var fooToUpdate = new Foo() 
       { 
        Id = foo.Id, 
        Status =foo.Status 
       }; 

       this.Context.Foos.Attach(fooToUpdate); 

       this.Context.Entry(fooToUpdate).Property("Status").IsModified = true; 

       this.Context.ValidateOnSaveEnabled = false; 

       this.dbSet.Attach(entityToUpdate); // This is IDbSet<Foo> 
       this.dbSet.Entry(entityToUpdate).State = EntityState.Modified; 

       this.dbSet.SaveChanges(); 

      } 

문제는 내가 EntityState.Modified에 주를 설정할 때 Chagned가 반환 true- -IsModified로, 모든 속성이 표시되어 있습니다.

내가 주석 처리하면 업데이트가 완료되지 않습니다. Db에서 변경 사항이 발생하지 않습니다.

질문 : Db의 다른 필드를 건드리지 않고 foo 개체의 Status 속성 만 업데이트하도록 EF를 적용하려면 어떻게해야합니까?

답변

0

EF에서는 단일 열을 업데이트 할 수 없습니다. 엔터티를 연결하는 대신 서버에서 가져 와서 모든 필드를 서버에있는 값으로 설정하면 다른 속성은 변경되지 않습니다. 컨텍스트에서 해당 ID로 엔티티를 찾으려고 시도하는 DbSet.Find() 메소드를 사용하려고합니다. 존재하지 않으면 데이터베이스에서 가져옵니다.