2011-01-31 5 views
1

特定のオブジェクトで添付ファイルを使用してモデルとその子を更新するにはどうすればよいですか?デタッチされたオブジェクトのエンティティフレームワークコードの最初の更新

public User UpdateUser(User user, IEnumerable<System.Linq.Expressions.Expression<Func<User, object>>> properties) 
    { 
     if (user.UserId == 0) 
     { 
      db.Users.Attach(user); 
     } 
     else 
     { 
      db.Users.Attach(user); 
      ObjectStateEntry entry = db.ObjectStateManager.GetObjectStateEntry(user); 
      foreach (var selector in properties) 
      { 
       string propertyName = PropertyToString(selector.Body); 
       entry.SetModifiedProperty(propertyName); 
      } 
     } 

     context.SaveChanges(); 
     return user; 
    } 

    private static string PropertyToString(Expression selector) 
    { 
     switch (selector.NodeType) 
     { 
      case ExpressionType.MemberAccess: 
       return ((selector as MemberExpression).Member as PropertyInfo).Name; 
       break; 

      case ExpressionType.Convert: 
       //Needed to recognize bool datatype 
       return (((selector as UnaryExpression).Operand as MemberExpression).Member as PropertyInfo).Name; 

       break; 
     } 
     throw new InvalidOperationException(); 
    } 

しかし、今、コード最初db.ObjectStateManagerをサポートしていません:

私は古いエンティティフレームワークと、次のようになりリポジトリパターンを使用しています。切り離されたオブジェクトの特定のプロパティを更新するにはどうすればよいですか?

答えて

1

あなたは、使用しようとすることができます:

コンテキストが DbContext派生クラスのごinstaceある
context.Entry(user).Property(u => u.Body).IsModified = true; 

0

var adapter = (IObjectContextAdapter)context; 
adapter.ObjectContext.ObjectStateManager ... 
をお試しください
関連する問題