EntityFramework обновить существующую сущность - PullRequest
0 голосов
/ 19 января 2012

WPF-MVVM-EntityFramework

У меня проблема, когда я пытаюсь обновить существующую сущность в проекте MVF MVMV У меня есть сущность Пользователь , в которой существует коллекцияиз UserApplication

UserApplication ServerId int ApplicationId int UserId int BinDirectory varchar (MAX)

Пользователь Login varchar (50)Id int

Когда я добавляю новое приложение для своего пользователя, мне нужно добавить запись в мою таблицу UserApplications.

В моем классе модели User есть метод AddApplication

public void AddApplication (int appId, int serverId, string bin)
{
this.userApplications.add (new UserApplication(){
 ApplicationId = appId,
 ServerId = serverId,
 BinDirectory = bin,
 userId = this.Id
});
}

В моей модели просмотра есть следующий код

this.currentUser.AddApplication(_currentApp.Id, _currentServer.Id, "my_directory");
userDao.Update(this.currentUser);

В userDao

public int Update(User userToSave)
        {                
            using (Context dpEnt = new Context())
            {
                try
                {
                    dpEnt.Attach(userToSave);
                    return dpEnt.SaveChanges();
                }
                catch (Exception ex)
                {
                    _log.Error(ex.Message);
                    return -1;
                }
            }
        }

Здесь у меня есть следующее исключение в приложениивызов: объект с временным значением EntityKey не может быть присоединен к контексту объекта.

Я также попытался (userDao)

public int Update(UserApplication userApp)
            {                
                using (Context dpEnt = new Context())
                {
                    try
                    {
                        dpEnt.UserApplications.AddObject(userApp);
                        return dpEnt.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        _log.Error(ex.Message);
                        return -1;
                    }
                }
            }

Здесь это также не работает

Можете ли вы помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 19 января 2012

Вы должны добавить приложение к пользователю после того, как вы прикрепили пользователя к контексту.В противном случае EF не распознает новое приложение:

В userDao вам понадобится такой метод, как:

public int AddApplicationToUser(User userToSave,
    int appId, int serverId, string bin)
{                
    using (Context dpEnt = new Context())
    {
        try
        {
            dpEnt.Attach(userToSave);
            userToSave.AddApplication(appId, serverId, bin);

            return dpEnt.SaveChanges();
        }
        catch (Exception ex)
        {
            _log.Error(ex.Message);
            return -1;
        }
    }
}

И затем только вызов:

userDao.AddApplicationToUser(this.currentUser,
    _currentApp.Id, _currentServer.Id, "my_directory");

Вы также можетенепосредственно добавьте новое приложение в контекст и сохраните изменения, поскольку ваше приложение имеет правильное свойство внешнего ключа, установленное для пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...