如何将新用户从MVC5中的Configuration存储到数据库中? - c#

我有一个从ApplicaitonUser继承的模型,定义如下:

public class Business : ApplicationUser
{
    ...
}

然后,在我的配置中,我将从CSV文件中读取所有信息,并创建业务对象列表。然后,我想将所有用户创建为新用户并添加到数据库中,并为他们提供一个默认密码(我稍后将列表中的所有用户的电子邮件发送给他们,以便他们更改密码)。我想我需要使用UserManager.CreateAsync方法,但似乎无法从我的配置文件中引用它。

目前,我有类似这样的内容,我从CSV文件中读取了所有与业务相关的信息:

        foreach (string csv in csvs)
        {
            using (CsvReader reader = new CsvReader(csv))
            {
                foreach (string[] values in reader.RowEnumerator)
                {
                    businesses.Add(new Business
                    {
                        BusinessName = values[0],
                        Email = values[1],
                        Address = values[2],
                        City = values[3],
                        StateID = states.Single(s => s.StateCode == values[4]).StateID,
                        Zip = values[5],
                        Phone = values[6],
                        Fax = values[7],
                        SICCode = values[8],
                        Description = values[9],
                        Website = values[10]
                    });
                }
            }
        }

然后,我想我需要一条类似于以下内容的foreach语句来遍历所有业务,但是我不知道这是正确的方法,即使是这样,如何从Configuration中访问UserManager .cs文件?我似乎无法从“配置”中访问它。

        foreach (Business b in businesses)
        {
            var result = await UserManager.CreateAsync(b, "MyPassword");
        }

参考方案

至于访问UserManager,您可以创建一个新的:

new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));

或者,如果在Startup.Auth.cs中进行了适当的设置,则从当前的HttpContext中获取一个:

HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()

现在,如果这是种子数据,则这种逻辑可能应该不在Web应用程序本身之内。如果确实希望通过读取csv文件以编程方式进行播种,请考虑编写一个与csv文件一起在本地拥有的单独的控制台应用程序,并在需要为特定数据库进行播种时运行此操作。

然后,您也可以使用UserManager跳过此ApplicationUser基础结构,为简单起见,仅生成您正在使用的数据库的数据库优先模型,并让EF照常插入数据。

编辑:哦,是的,密码。因此,您仍然可以使用UserManager基础结构解决所有问题,或者,如果要遍历UserManager的其他部分,可以手动使用UserManager.PasswordHasher.HashPassword("Password")。

asp.net mvc或javascript将另一页的结果返回给方法 - c#

是否可以将另一个页面的结果返回给JavaScript方法或C#控制器操作?我有一个共享的复杂页面,该页面在我的网站上遍布使用,当前用于在C#后端的用户数据上设置单个变量。当用户完成共享的复杂页面后,我将返回引用页面。当用户在刷新或返回时将其作为url参数传递给返回的页面时,我返回的页面包含新选择的变量。我有一个新页面,我希望从我的共享复杂页面中返回该变量。但…

ASP.NET MVC 5自定义登录,无需脚手架,数据库优先 - c#

我对asp.net和mvc还是很陌生,所以我正在努力学习尽可能多的知识...为此,我从头开始编写博客网站,但是我对身份验证和授权有些困惑。由于我倾向于不真正使用任何脚手架的东西,所以我首先要使用数据库,所以不希望asp.net身份为我创建表。我对散列和加盐密码很酷,并对照数据库检查用户,我遇到的麻烦是将用户设置为登录状态并检查他们应该能够访问什么。我真的很想…

ASP.NET-如何更改JSON序列化的方式? - javascript

我正在使用ASP.NET通过以下查询返回Json文件:public ActionResult getTransactionTotals(int itemID) { DBEntities db = new DBEntities(); var query = from trans in db.Transactions // Linq query removed …

asp.net oledbcommand返回所有行 - c#

我正在使用Oledbconnection连接到Microsoft Access数据库,并且正在使用OleDbCommand检索一些信息。我在数据库中有一个名为retrieveInfo的查询,该查询检索3行数据。字段中有一些重复项,但是应该是这样。我的数据如下所示: Name Email A [email protected] B [email protected] B C@gmai…

ASP.NET MVC在控制器中实施分析 - c#

我有这个控制器public ActionResult Download(Guid? codice) { if (codice == null) { return HttpNotFound(); } string _pathfile = "path-to-file"; byte[] fileBytes = System.IO.File.Re…