2012-09-02 3 views
0

사용자 만들기에 사용하는 코드가 있습니다. Linq, Lambda 및 EF로 업데이트하는 방법

public static void CreateUser(User user) 
    { 

      Save<User>(u => u.AddObject(user)); 

    } 

    Save<T>(Action<ObjectSet<T>> func) 
     where T : class 
    { 

     ... 

     func(entitySet); 

     entitiesContext.SaveChanges(); 
    } 

는 지금은 업데이트 방법을 쓰기 위해 노력하고 있어요,하지만 내가 개체를 업데이트하려면 어떻게 u = user

public static void UpdateUser(User user) 
{ 
     Save<User>(u => u = user); 
}  

에 컴파일되지 않습니다?

+0

변수의 이름을 지정하고 동일한 문자를 입력하는 것은 현명하지 않습니다. – Lucero

+0

@ 루세로 내가 오른쪽에 게시 할 때 섞여 버린 권리. Fixed now – user1615362

답변

1

엔티티가 컨텍스트에서 분리 된 경우 다음과 같이 업데이트 할 수 있습니다.

public static void UpdateUser(User user) 
{ 
     Save<User>(u => { 
     u.Attach(user); 
     u.Context.ObjectStateManager 
       .ChangeObjectState(user, System.Data.EntityState.Modified); 
     }); 
} 
0

linq과 함께 사용하려면 ref 매개 변수가있는 사용자 정의 일반 위임을 구현할 수 있습니다. 예를 들어.

public delegate void MyDelegate<T>(ref T x); 

public static void CreateUser(User user) 
{ 
     Save<User>((ref User u) => u = user)); 
} 

Save<T>(MyDelegate<ObjectSet<T>> func) 
    where T : class 
{ 

    ... 

    func(entitySet); 

    entitiesContext.SaveChanges(); 
} 
+0

컴파일되지 않음 – user1615362

+0

매개 변수 형식이 대리자 매개 변수 형식과 일치하지 않으므로 람다 식을 'MyDelegate >'대리자 형식으로 변환 할 수 없습니다. – user1615362

관련 문제