mysql - 使用 Identity 从同一数据库检索数据

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

我将 WebApp 的身份模型连接到 MySQL 数据库,并按照我想要的方式对其进行了修改。

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

我附上连接数据库的代码:

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

还有我的连接字符串:

<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 中开发应用程序)

最佳答案

是的,您所需要做的就是在需要时打开连接。 所以,我假设你对 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 对象

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

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

  }
}

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

关于mysql - 使用 Identity 从同一数据库检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42620421/

相关文章:

java - 如何在 Spring JPA for MySQL 中为 @Id @GeneratedValue 设置初始值?

asp.net - 删除 Umbraco 的通知并显示我自己的通知

asp.net-mvc - ASP.NET MVC 内联包

asp.net - HTTP缓存: Cache-Control

php - 如果数据库表中没有值,如何在 Php 中显示

php - 存储 ~50,000,000 个值的最佳数据库是什么?

mysql - 如何对另一个表中没有匹配条目的行进行求和?

asp.net - 如何更改 Google Recaptcha 宽度?

c# - 在 C# 中,以下语法的作用是什么 : ((Classname)this. variableName).property

c# - ASP.NET Identity 2 是否支持匿名用户?