我有一个Windows程序,应该在安装期间部署而不写入AppData,但我想要一个Sql CE数据库。
所以我有2个想法:将它部署到程序,然后在第一次启动时复制,或者,我想要的,编码所有内容。
所以我发现这个线程Deploying VS2010 Database Projects Without VSDBCMD?基本上告诉我这是一个坏主意,但我不认为回答者是在知道,我有一个更好的主意。我在某处发现了一段代码:
string connStr = "Data Source = FooDatabase.sdf; Password = SomePassword";
if (File.Exists("FooDatabase.sdf"))
File.Delete("FooDatabase.sdf");
SqlCeEngine engine = new SqlCeEngine(connStr);
engine.CreateDatabase();
using (var conn = new SqlCeConnection(connStr)) {
conn.Open();
SqlCeCommand cmd = conn.CreateCommand();
cmd.CommandText = "CREATE TABLE FooTable(col1 int, col2 ntext)";
cmd.ExecuteNonQuery();
从这里开始:Create SQLCE database programmatically
我要问的是,如果这适用于任何PC以及我必须做什么代码才能使用Entity Framework。我在考虑像
这样的东西public class FooContext : System.Data.Entity.DbContext
{
public FooContext() : base("Data Source = FooDatabase.sdf; Password = SomePassword") { }
public DbSet<FooTable> FooTables { get; set; }
}
public class FooTable
{
public int col1 { get; set; }
public string col2 { get; set; }
}
但我只是不让它工作。
可能只是连接字符串是错误的,但我如何避免使用它或者正确的怎么样?
帮助PLZ?
答案 0 :(得分:0)
尝试在启动逻辑中使用它
private static void InitializeDB()
{
const string connectionString = "Data Source = FooDatabase.sdf; Password = 123";
Database.DefaultConnectionFactory = new
SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "", connectionString);
}
看看这个post