Обновление кода платформы сущностей на отдельных объектах - PullRequest
1 голос
/ 31 января 2011

Как обновить модель и ее дочерний элемент, используя присоединение с конкретными объектами?

Я использую шаблон хранилища, который выглядит следующим образом со старой структурой сущности:

    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();
    }

Но теперь code-first не поддерживает db.ObjectStateManager. Как запустить обновление определенных свойств для отдельных объектов?

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Вы можете попытаться использовать:

context.Entry(user).Property(u => u.Body).IsModified = true;

Где контекст - ваш источник DbContext производного класса.

0 голосов
/ 08 февраля 2013

Попробуйте

var adapter = (IObjectContextAdapter)context;
adapter.ObjectContext.ObjectStateManager ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...