Entity Framework MVC 应用程序是否可以在不同的数据库上使用 运行 .sql 脚本

Is it possible in Entity Framework MVC application to run .sql scripts on a different database

是否可以从我的 Asp.net MVC (EF) 应用程序连接到另一个数据库,运行 一些脚本,然后关闭连接。

因为我 运行 该应用程序已经连接到默认数据库。然后我可以同时连接到另一个(通过控制器操作)一段时间,运行 那个上面的一些脚本然后关闭连接吗?

使用其他数据库的连接字符串设置单独的上下文,并使用以下选项之一。

为非实体类型编写 SQL 查询

可以使用数据库 class 上的 SqlQuery 方法创建一个 SQL 查询返回任何类型的实例,包括基本类型。例如:

using (var context = new BloggingContext()) 
{ 
    var blogNames = context.Database.SqlQuery<string>( 
                       "SELECT Name FROM dbo.Blogs").ToList(); 
}

从数据库的 SqlQuery 返回的结果永远不会被上下文跟踪,即使对象是实体类型的实例。

向数据库发送原始命令

可以使用数据库上的 ExecuteSqlCommand 方法将非查询命令发送到数据库。例如:

using (var context = new BloggingContext()) 
{ 
    context.Database.ExecuteSqlCommand( 
        "UPDATE dbo.Blogs SET Name = 'Another Name' WHERE BlogId = 1"); 
}

请注意,在从数据库加载或重新加载实体之前,使用 ExecuteSqlCommand 对数据库中的数据所做的任何更改对上下文都是不透明的。

输出参数

如果使用输出参数,在结果被完全读取之前它们的值将不可用。

好的。所以这就是我在我的控制器中所做的

public class AdminController : Controller
{
    public ActionResult Install()
    {
        foreach (ConnectionStringSettings c in System.Configuration.ConfigurationManager.ConnectionStrings)
        {


                //get all files from this folder except insert and mysql create scripts and then run each of them
                string script = System.IO.File.ReadAllText(@"C:\Test.sql");
                MySqlConnection conn = new MySqlConnection(c.ConnectionString);
                try
                {
                    conn.Open();
                    MySqlScript m = new MySqlScript(conn, script);
                    m.Delimiter = "$$";
                    m.Execute();
                    conn.Close();
                }
                catch { }

        }

        return View();
    }
}