C# EF6 что делаю не так?

Пытаюсь освоить EF6. Создал базу по схеме Model First. Ну и на данный момент реализую логику "если в базе не найдено ни одного пользователя тогда создаем дефалтного" Вот реализация:

private void LoadUsers()
    {
        try
        {
            using (var CurentContext = new MedDBModelContainer())
            {
                var users = CurentContext.UsersSet.ToList();
                if (!users.Any())
                {
                    var default_user = GetAdmin(CurentContext);
                    CurentContext.UsersSet.Add(default_user);
                    CurentContext.Entry(default_user).State = EntityState.Added;
                    CurentContext.SaveChanges();
                    ExLog.Info("В настройках пользователей программы не обнаружено ни одного пользователя. Создан пользователь по умолчанию `Администратор`");
                }
            }
        }
        catch (Exception ex)
        {
            ExLog.Error(ex.Message, ex);
            MessageBox.Show(
                "Возникла ошибка при получении списка пользователей. Обратитесь к вашему системному администратору.", "Опс, ошибка!");
        }
    }

    private Users GetAdmin(MedDBModelContainer CurentContext)
    {
        return new Users()
        {
            Dismissed = false,
            Firstname = "Администратор",
            Lastname = "Администратор",
            Middlename = "Администратор",
            Phone = "+71231231212",
            Roles = GetRole("Администратор", CurentContext)
        };
    }

    private Roles GetRole(string rolename, MedDBModelContainer CurentContext)
    {
        try
        {
            var Roles = CurentContext.RolesSet;
            if (Roles.Any())
            {
                return (CurentContext.RolesSet.Single(x => x.RoleName.Equals(rolename)));
            }
            else
            {
                MessageBox.Show(
                    "Необходимо произвести настройку ролей. Обратитесь к вашему системному администратору.");
            }
        }
        catch (Exception ex)
        {
            ExLog.Error(ex.Message, ex);
            MessageBox.Show("Ошибка получения ролей.", "Опс, ошибка!");
        }
        return new Roles();
    }

После выполнения по дебагу роль из базы получаю но пользователь не создается в базе. Почему?(


Ответы (1 шт):

Автор решения: xxramm
var Roles = CurentContext.RolesSet;

Строчка выше - это запрос, который еще не выполнен. Исправьте на:

var Roles = CurentContext.RolesSet.ToList(); 

Строчку ниже необходимо удалить. EF умный и сам определится с состоянием сущности.

 CurentContext.Entry(default_user).State = EntityState.Added;
→ Ссылка