Entity Framework: присоединенные объекты не сохраняются - PullRequest
0 голосов
/ 05 мая 2010

Я не могу понять, почему вызов SaveChanges () для следующего кода не приводит к изменениям объектов, которые я прикрепил:

public void Update()
{
AccountUser accountUser = new AccountUser();

// update
using (var db = new MedicalSystemDBEntity())
{
    var query = from user in db.AccountUsers   
                where user.id == this.UserID
                select user;

    if (query.Count() > 0)
    {
        accountUser = query.First();

        accountUser.AccountRoles.Load();
        accountUser.SecurityNavigationNodes.Load();

        // delete existing user roles before re-attaching
        if (accountUser.AccountRoles.Count > 0)
        {
            foreach (AccountRole role in accountUser.AccountRoles.ToList())
            {
                accountUser.AccountRoles.Remove(role);
            }
        }

        db.SaveChanges();

        // get roles to add
        List<int> roleIDs = new List<int>();

        foreach (UserRole r in this.AccountRoles)
        {
            roleIDs.Add(r.RoleID);
        }

        var roleEntities = from roles in db.AccountRoles
                           where roleIDs.Contains(roles.id)
                           select roles;

        accountUser.AccountRoles.Attach(roleEntities);

        accountUser.username = this.Username;
        accountUser.firstname = this.FirstName;
        accountUser.middlename = this.MiddleName;
        accountUser.lastname = this.LastName;
        accountUser.enabled = this.Enabled;

        if (this.LastActivityDate != null || this.LastActivityDate != DateTime.MinValue)
            accountUser.lastactivitydate = this.LastActivityDate;

        db.SaveChanges();
    }
}

}

В отладчике я вижучто правильные roleEntities загружаются, и что они являются действительными объектами.Однако, если я использую SQL Profiler, я не вижу запросов UPDATE или INSERT, и в результате ни один из моих прикрепленных объектов не сохраняется.

Ответы [ 3 ]

3 голосов
/ 05 мая 2010

Они не сохраняются, потому что вы меняете сущности перед их присоединением. Изменения отслеживаются контекстом (обычно), поэтому изменения в отдельных объектах не отслеживаются. Следовательно, нечего экономить.

0 голосов
/ 19 июля 2011

Иногда это происходит потому, что соответствующие объекты были изменены при отсоединении.Пост здесь покажет, как это исправить.

0 голосов
/ 05 мая 2010

Вверх моей головы, разве вы не должны делать SaveChanges () после удаления ролей из учетной записи? Разве вы не просто удаляете роли, прикрепленные к пользователю, а затем присоединяете те же самые роли? Со времени сохранения изменений ничего бы не изменилось, не так ли?

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