Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用.NETMVC和C从配置文件的列表中引用特定对象#_C#_Asp.net Mvc_Linq_Configuration Files - Fatal编程技术网

C# 如何使用.NETMVC和C从配置文件的列表中引用特定对象#

C# 如何使用.NETMVC和C从配置文件的列表中引用特定对象#,c#,asp.net-mvc,linq,configuration-files,C#,Asp.net Mvc,Linq,Configuration Files,我正在编写一个设置序列,其中我正在多租户CMS中填充新站点所需的数据。然而,虽然我非常熟悉数据设计和所有web前端,但我对实际的编码非常陌生 正如您从下面的代码中看到的,我有一个“for each”表达式用于创建我的角色,它位于config.cs的列表中,这些表达式创建得非常漂亮 但是,对于每个默认用户,我需要从我刚才按名称创建的用户角色中分配一个值。我认为这可能与LINQ有关,但我不确定如何打破这一局面。有什么建议吗 代码如下: foreach (var userRoleName in _c

我正在编写一个设置序列,其中我正在多租户CMS中填充新站点所需的数据。然而,虽然我非常熟悉数据设计和所有web前端,但我对实际的编码非常陌生

正如您从下面的代码中看到的,我有一个“for each”表达式用于创建我的角色,它位于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代码:(实际值将从此文件移到文档中,但此处仅用于开发目的。)

公共类配置数据
{
公共配置数据()
{
SystemDomainDefault=“.joyatechsolutions.com”;
UserRoles=新列表{“管理员”、“编辑”、“公共”、“上帝”};
用户=新列表
{
新的DefaultUser{FullName=“Default Public User”,Login=“”,Password=“”,UserRoleName=“Public”},
新的默认用户{FullName=“Mary Camacho”,Login=“mc”,Password=“test1”,UserRoleName=“God”},
新的默认用户{FullName=“Mary”,Login=“mn”,Password=“test2”,UserRoleName=“God”},
};
}
公共列表用户{get;set;}
公共字符串SystemDomainDefault{get;set;}
公共列表用户角色{get;set;}
}
公共类DefaultUser
{
公共字符串全名{get;set;}
公共字符串登录{get;set;}
公共字符串密码{get;set;}
公共字符串UserRoleName{get;set;}
}

能否将用户角色定义为:

enum UserRoles
{
    Administrator,
    Editor,
    Public,
    God
}
这样,您可以通过执行以下操作获得角色的名称:

UserRoles role = UserRoles.Administrator;
string roleName = role.Tostring();
并从字符串中获取枚举类型,如下所示:

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

我想我可能遗漏了一些有助于回答我提出的问题的重要细节,昨晚我从一位同事那里得到了一些帮助,所以我们就是这样解决问题的:

    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中看到,我们已经确定了每个新用户的角色名称-因此我们正在使用userRoleName中的“.first”查找该名称,然后将保存的角色与用户关联

我们能够使用“.First”术语,因为此代码将在站点设置过程中严格使用,并且我们知道新站点中唯一存在的用户角色是我们刚刚在此序列中创建的角色。这对于更一般的代码来说不够健壮


最后,与问题无关,我们添加了一个if语句,这样我们就可以将公共用户与站点关联起来。再一次,这只在站点设置中起作用,因为我们知道在运行此代码时站点只存在一个公共用户。

谢谢-但我想我在问题中遗漏了一些重要信息-主要部分是,我试图从已保存的对象而不是配置文件中获取userRole创建。
    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();