首页 > 解决方案 > 如何使用 Asp.net core EF Core 在 Web 托管服务器上创建多个数据库

问题描述

您好我正在尝试使用C# asp.net core开发我的桌面应用程序的 web 版本,但不确定如何处理数据库,这是我想要实现的,我的桌面应用程序是使用VB开发的销售点系统从而应用程序用户能够管理多个商店,并且每个商店都有自己的数据库,在创建商店后,执行数据库脚本,现在为新商店创建数据库。下面是我创建数据库的示例代码。

 'Get DB NAme
        Dim DbNumber As Integer
        ConnectTools()
        cmd.CommandText = "select MAX(StoreCount) as cntt from tblStores"
        rd = cmd.ExecuteReader
        rd.Read()
        If IsDBNull(rd.Item("cntt")) Then
            DbNumber = "1"
        Else
            DbNumber = rd.Item("cntt") + 1
        End If
        rd.Close()
        DatabaseName = "AutemStore" & DbNumber

        cmd.Connection = conn
        'conn.Open()
        conn.ChangeDatabase("Master")
        If conn.State = ConnectionState.Open Then conn.Close()
        conn.Open()
        cmd.CommandText = "Create Database " & DatabaseName
        cmd.ExecuteNonQuery()
        'Save DB Name
        My.Settings.DatabaseName = DatabaseName
        My.Settings.Save()
        'Run DB Script 

        conn.ChangeDatabase(My.Settings.DatabaseName)
        cmd.CommandText = ReadFile(Application.StartupPath & "\dstore.sql")
        cmd.CommandType = CommandType.Text
        cmd.ExecuteNonQuery()

我相信有一种方法可以使用Asp.net 核心来完成我刚刚解释的这项任务,但我还不知道如何完成它,请有任何关于如何执行此操作或替代方法的建议它完成了。提前致谢。

标签: c#asp.netasp.net-core

解决方案


由于您正在尝试使用 EF(或者可能是 EFCore),我假设您已经设置了数据模型并注入了DbContextas _context。(如果你还没有,你可以按照官方文档开始)。

之后,您可以使用 EFCore 重写您的 VB.NET + ADO.NET 代码,如下所示:

  1. select MAX(StoreCount) as cntt from tblStores的第一个查询可以通过

    var cntt = _context.Stores.Max(t => t.StoreCound);
    
  2. 创建数据库的第二个命令可以重写为:

    var sql= "Create Database @dbname";
    var dbname = new SqlParameter("@dbname", "The_DB_Name");
    _context.Database.ExecuteSqlCommand(sql, dbname);
    

推荐阅读