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();
}
}
是否可以从我的 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();
}
}