C# 如何将新用户从MVC5中的配置存储到数据库中?

C# 如何将新用户从MVC5中的配置存储到数据库中?,c#,asp.net-mvc,entity-framework,csv,asp.net-identity,C#,Asp.net Mvc,Entity Framework,Csv,Asp.net Identity,我有一个从ApplicationUser继承的模型,定义如下: public class Business : ApplicationUser { ... } 然后,在我的配置中,我从CSV文件中读取所有信息,并创建一个业务对象列表。然后,我想将他们全部创建为新用户并添加到数据库中,并给他们一个默认密码(稍后我会向列表中的所有用户发送电子邮件,告知他们的密码,以便他们可以更改密码)。我想我需要使用UserManager.CreateAsync方法,但我似乎无法从配置文件中引用它 目前,

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

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.cs文件访问UserManager?我似乎无法从配置中访问它

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

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

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

如果您想了解UserManager的其他部分,请手动新建UserManager。

虽然接受的解决方案有效,但我认为这提供了一个更好的选择。下面是一篇关于我使用的数据库种子设定的文章:。下面是我用于匹配您的情况的代码的分解

在DbContext构造函数中,可以指定引用Configuration.cs文件的数据库初始值设定项。对于初始值设定项的类型,您有几个选项,您可以找到它们

public ApplicationDBContext()
:base(“默认连接”)
{
SetInitializer(新的MigrateDatabaseToLatestVersion());
}
在配置文件中指定后,可以添加种子函数,用CSV中的项目填充数据库。这样做将允许您将数据种子植入数据库,而无需将代码放入web项目中,也无需创建单独的应用程序

internal sealed class Configuration : DbMigrationsConfiguration<IBCF.Core.ApplicationDBContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(IBCF.Core.ApplicationDBContext context)
    {
        //Initialize managers
        var userManager = new UserManager<Business>(new UserStore<Business>(context));

        //Do something to populate your csvs variable

        foreach (string csv in csvs)
        {
            using (CsvReader reader = new CsvReader(csv))
            {
                foreach (string[] values in reader.RowEnumerator)
                {
                    var business = 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]
                    };

                    userManager.Create(business, "MyPassword")
                }
            }
        }

        context.SaveChanges();
    }
}
内部密封类配置:dbmigtorinsconfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=真;
}
受保护的覆盖无效种子(IBCF.Core.ApplicationDBContext上下文)
{
//初始化管理器
var userManager=newusermanager(newuserstore(context));
//做些事情来填充csvs变量
foreach(csv中的字符串csv)
{
使用(CsvReader读卡器=新CsvReader(csv))
{
foreach(reader.RowEnumerator中的字符串[]值)
{
var业务=新业务
{
BusinessName=值[0],
电子邮件=值[1],
地址=值[2],
城市=数值[3],
StateID=states.Single(s=>s.StateCode==values[4]).StateID,
Zip=值[5],
电话=值[6],
传真=数值[7],
SICCode=值[8],
Description=值[9],
网站=价值观[10]
};
userManager.Create(业务,“我的密码”)
}
}
}
SaveChanges();
}
}

在创建新业务时,能否向业务类添加密码字段并为其指定默认值{}能否演示业务是如何完全定义的please@DJKRAZE我的商务课程包括上述所有领域。除了电子邮件。关键是,它继承自ApplicationUser,因此它也拥有它的所有字段,从中产生了电子邮件字段。我的问题是如何从配置文件创建新用户并将其存储在数据库中。我想我需要像下面这样的每一个声明。但是,我无法从配置文件访问UserManager。设置默认密码不是问题,而CreateAync接受两个参数,一个ApplicationUser和一个作为密码的字符串。当您说Configuration.cs file时,您的意思是什么?你想为数据库设置种子吗?@ett有点晚了,但我发布了一个关于如何使用EF配置文件为数据库设置种子的答案。谢谢,我会看一看。我也采用了类似的方法。我会让你知道结果的。我同意这是一个可行的方法,但是Database.SetInitializer真的应该在DbContext的构造函数中吗?把它放在Global.asax的应用程序中不是更好吗?这个问题对初始值设定项放在哪里有一些好的建议。()总的来说,我认为这是一个偏好/项目配置的问题。
    public ApplicationDBContext()
        : base("DefaultConnection")
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDBContext, IBCF.Core.Migrations.Configuration>());
    }
internal sealed class Configuration : DbMigrationsConfiguration<IBCF.Core.ApplicationDBContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(IBCF.Core.ApplicationDBContext context)
    {
        //Initialize managers
        var userManager = new UserManager<Business>(new UserStore<Business>(context));

        //Do something to populate your csvs variable

        foreach (string csv in csvs)
        {
            using (CsvReader reader = new CsvReader(csv))
            {
                foreach (string[] values in reader.RowEnumerator)
                {
                    var business = 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]
                    };

                    userManager.Create(business, "MyPassword")
                }
            }
        }

        context.SaveChanges();
    }
}