使用Identity从同一数据库中检索数据

时间:2017-03-06 08:03:47

标签: mysql asp.net asp.net-mvc entity-framework asp.net-identity

我将WebApp的身份模型连接到我的MySQL数据库,并将其修改为我想要连接。

我的问题是下一个:如果我想从Identity中未使用的表中获取数据,但仍然来自同一个数据库,那么正确的方法是什么?我应该打开一个新连接并获取类的数据吗?有没有办法在模型中实现它?

我附上代码以连接到数据库:

public void Configuration(IAppBuilder app)
{
    DbConfiguration.SetConfiguration(new MySqlEFConfiguration());
    ConfigureAuth(app);
    context = new ApplicationDbContext();
}

我的connectionStrings:

<connectionStrings>
    <add name="DefaultConnection" connectionString="server=x.x.x.x;uid=user;password=pwd;database=db;port=3306;charset=utf8" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

(对不起,如果问题太明显了,我开始在ASP.NET MVC中开发应用程序)

1 个答案:

答案 0 :(得分:1)

是的,您需要做的就是在需要时打开连接。 所以,我假设您使用MySQL数据库连接做了类似的事情

public class MySqlInitializer : IDatabaseInitializer<ApplicationDbContext>
{
    public void InitializeDatabase(ApplicationDbContext context)
    {
         if (!context.Database.Exists())
         {
          // if database did not exist before - create it
           context.Database.Create();
         }
         else
         {
          // query to check if MigrationHistory table is present in the database 
           var migrationHistoryTableExists =        ((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
            string.Format("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0}' AND table_name = '__MigrationHistory'",
      "[Insert your database schema here - such as 'users']"));

    // if MigrationHistory table is not there (which is the case first time we run) - create it
          if (migrationHistoryTableExists.FirstOrDefault() == 0)
          {
             context.Database.Delete();
             context.Database.Create();
          }
        }
   }}

并且您的ApplicationDbContext类将是这样的

public class ApplicationUser : IdentityUser{}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
   static ApplicationDbContext()
   {
       Database.SetInitializer(new MySqlInitializer());
   }

   public ApplicationDbContext()
  : base("DefaultConnection")
  {
  }
}

现在,要从数据库执行一些查询,您需要创建一个ApplicationDbContext

的对象

那么,你的下一个问题“有没有办法在模型中实现它?”是的,您需要创建一个视图模型。

public class ItemProduct
{
    public int Id {get; set;};
    public string Name {get; set;};
}

因此,假设您的数据库中存在产品表,我们可以对其进行查询。

public class HomeController : Controller
{ 
   ApplicationDbContext context = new ApplicationDbContext();
  public ActionResult AnyName() 
  {
     List<ItemProduct> lstProducts = new List<ItemProduct>();
     var getProducts = (from p in context.Products
                        select p).ToList();
     foreach(var item in getProducts)
     {
         ItemProduct pro = new ItemProduct()
         {
            pro.Id = item.Id,
            pro.Name = item.Name
         };
         lstProducts.Add(pro);
     }

     // So, you have all your Products in ItemProduct Class list.
     // Now, return lstProducts to your View to show it on front end

  }
}

希望这能回答你的问题:)