Как ссылаться на конкретный объект из списка в конфигурационном файле, используя .NET MVC с C # - PullRequest
2 голосов
/ 31 августа 2011

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

Как вы можете видеть из приведенного ниже кода, у меня есть выражение «для каждого» для создания моих ролей в списке в config.cs - они прекрасно создаются.

Для каждогопользователь по умолчанию, однако, мне нужно назначить одно из значений пользовательских ролей, которые я только что создал, по имени.Я думаю, что это может иметь какое-то отношение к LINQ, но я не уверен, как это исправить.Любые предложения?

Вот код:

 foreach (var userRoleName in _configData.UserRoles)
        {
            var newUserRole = new UserRole(newSite, userRoleName);
            _daoFactory.GetUserRoleDao().Save(newUserRole);
        }

        _daoFactory.GetUserRoleDao().FlushChanges();

        //Thinking this is not needed?
        Thread.Sleep(500);

        //var newSiteCopy = _daoFactory.GetSiteDao().GetById(newSite.Id);
      _daoFactory.GetSiteDao().Refresh(newSite);

        foreach (var defaultUser in _configData.Users)
        {
            var newUser = new User(newSite, defaultUser.FullName, defaultUser.Login, defaultUser.Password);

            _daoFactory.GetUserDao().Save(newUser);

        }

        _daoFactory.GetUserDao().FlushChanges();

Вот код config.cs: (Фактические значения будут перемещены из этого файла в документ, но здесь для Devтолько для целей.)

 public class ConfigData
{
    public ConfigData()
    {
        SystemDomainDefault = ".joyatechsolutions.com";
        UserRoles = new List<string>{"Administrator","Editor","Public","God"};
        Users = new List<DefaultUser>
                    {
                        new DefaultUser { FullName = "Default Public User", Login = "", Password = "", UserRoleName = "Public"},
                        new DefaultUser { FullName = "Mary Camacho", Login = "mc", Password = "test1", UserRoleName = "God"},
                        new DefaultUser { FullName = "Mary", Login = "mn", Password = "test2", UserRoleName = "God"},
                    };

    }
    public List<DefaultUser> Users { get; set; }
    public string SystemDomainDefault { get; set; }
    public List<string> UserRoles { get; set; }
}

public class DefaultUser
    {
        public string FullName { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public string UserRoleName { get; set; }
    }

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

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

    User defaultPublicUser = null;
        foreach (var newUserData in _configData.Users)
        {
            var newUser = new User(newSite, newUserData.FullName, newUserData.Login, newUserData.Password);
            var userRole = newSite.UserRoles.First(ur => ur.Name == newUserData.UserRoleName);
            if (newUserData.UserRoleName == "Public")
            {
                defaultPublicUser = newUser;
            }
            newUser.UserRoles.Add(userRole);
            newUser.UserStatusType = _daoFactory.GetUserStatusTypeDao().GetById(UserStatusType.cActive);
            _daoFactory.GetUserDao().Save(newUser);
        }
        _daoFactory.GetUserDao().FlushChanges();

По сути, у нас был новый объект Site, который содержал сохраненные UserRoles, и мы использовали LINQ для запроса этого объекта и возврата значения, которое мы затем связали с новым пользователем.Вы можете увидеть в config.cs сверху, что мы уже определили, каким должно быть имя роли для каждого нового пользователя, поэтому мы находим это имя, используя «.first» в userRoleName, а затем связываем сохраненную роль с пользователем..

Мы смогли использовать термин «.First» и потому, что этот код будет строго использоваться во время процесса настройки сайта, и мы знаем, что единственными ролями пользователей, которые будут существовать для нового сайта, являются те, которыемы только что создали внутри этой последовательности.Этого недостаточно для более общего кода.

Наконец, не относясь к вопросу, мы добавили оператор if, чтобы мы могли связать публичного пользователя с сайтом.Опять же, это работает в настройке сайта только потому, что мы знаем, что на момент запуска этого кода для сайта существует только один публичный пользователь.

0 голосов
/ 31 августа 2011

Можете ли вы определить UserRoles как:

enum UserRoles
{
    Administrator,
    Editor,
    Public,
    God
}

Таким образом, вы можете получить название роли, выполнив следующее:

UserRoles role = UserRoles.Administrator;
string roleName = role.Tostring();

И получить тип перечисления из String следующим образом:

(UserRoles)Enum.Parse(typeof(UserRoles), "Administrator");
...