我们使用实体框架创建了一个C#程序 现在我无法进行设置,因为如果该程序安装在另一个系统上,则很难错过数据库。 该程序自动安装sql server引擎。现在我的问题是数据库的安装。 我想要一个代码来检查安装时是否在引擎上有数据库,如果没有,安装我们的数据库安装的脚本文件。
答案 0 :(得分:1)
听起来你想要一个Database Initialization Stategy而且我推荐这个符合你的要求:
CreateDatabaseIfNotExists :这是默认初始值设定项。顾名思义,如果根据配置不存在,它将创建数据库。但是,如果更改模型类然后使用此初始化程序运行应用程序,则会抛出异常。
我链接的页面还包含如何实施策略的示例:
public class SchoolDBContext: DbContext
{
public SchoolDBContext(): base("SchoolDBConnectionString")
{
Database.SetInitializer<SchoolDBContext>(new CreateDatabaseIfNotExists<SchoolDBContext>());
//Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseIfModelChanges<SchoolDBContext>());
//Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseAlways<SchoolDBContext>());
//Database.SetInitializer<SchoolDBContext>(new SchoolDBInitializer());
}
public DbSet<Student> Students { get; set; }
public DbSet<Standard> Standards { get; set; }
}
答案 1 :(得分:0)
如果您正在使用代码优先迁移,则可以生成所需的sql-scripts。我相信你已经有了运行的脚本,所以这不会成为一个问题。
如果初始化程序不能解决问题,您可以查看自定义操作。 然后,您可以运行具有运行安装程序的系统/用户的权限的程序,以检查数据库(或服务器)是否存在。如果没有创建它。
假设您正在创建msi设置,请查看此处。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa368066(v=vs.85).aspx
答案 2 :(得分:0)
我使用sp_attach_db作为附加数据库。 但他告诉我成功附加数据库 但是SQL Server没有附加某些内容 当我运行两次运行时,程序会说数据库可用 要么 (数据库'TellDB'已存在。请选择其他数据库名称。 将数据库上下文更改为“master”。)
try
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;";
con.Open();
string str = "USE master;" +
"EXEC sp_attach_db @dbname = N'TellDB' , " +
" @filename1 = N'" + System.Environment.CurrentDirectory + "\\Data\\TellDB.mdf'," +
"@filename2 = N'" + System.Environment.CurrentDirectory + "\\Data\\TellDB_log.ldf'";
SqlCommand cmd = new SqlCommand(str, con);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Attach the database successfully");
}
catch (Exception x)
{
if (x.Message.IndexOf("already exists") >= 0)
MessageBox.Show("The database is available");
else
MessageBox.Show(x.Message);
}