【问题标题】:How To Create multiple database on web hosting server using Asp.net core EF Core如何使用 Asp.net core EF Core 在 Web 托管服务器上创建多个数据库
【发布时间】:2020-02-14 22:56:42
【问题描述】:

您好我正在尝试使用 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 core 完成我刚才解释的这项任务,但我还不知道如何完成它,请问有什么建议吗关于如何做到这一点或完成它的替代方法。提前致谢。

【问题讨论】:

  • 看来您使用的是 ADO.NET。请注意,它在 ASP.NET Core 中也可用。但是,我们不知道您的ConnectTools() 和更多详细信息(例如ReadFile()),因此我们无法为您提供完整的列表代码。但请注意 API 几乎相同,您可以轻松地将 VB.NET 重写为 C#。
  • 感谢您的回复,我分享的示例代码是我在桌面应用程序上做的,现在我想使用 ASP.NET CORE 和 ENTITY FRAMEWORK,它是一个正在尝试构建的多租户应用程序,但不确定如何使用这些工具来做到这一点。

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


【解决方案1】:

由于您尝试使用 EF(或者可能是 EFCore),我假设您已设置数据模型并将DbContext 注入为_context。 (如果还没有,可以关注official docs 开始)。

之后,您可以像这样使用 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);
    

【讨论】:

  • 非常感谢,这真的很有帮助,我已经注入了模型和 DbContext,最后一部分是数据库脚本执行,你能说一下吗?
  • @AustinMrakpor 您始终可以通过_context.Database.ExecuteSqlCommand(...) 执行原始 sql 语句。为了防止 SQL 注入,我们应该使用参数化查询,这就是我创建 @dbname 参数的原因。有关详细信息,请参阅official docs。另见this thread for raw sql execution
猜你喜欢
  • 1970-01-01
  • 2019-04-19
  • 2022-10-15
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 2018-08-29
  • 2021-04-02
  • 1970-01-01
相关资源
最近更新 更多