0

我有一个 Windows 程序,应该在安装过程中不写入 AppData 来部署它,但我想要一个 Sql CE 数据库。

所以我有两个想法:将它部署到程序中,然后在第一次启动时复制,或者,我更喜欢,对所有内容进行编码。

所以我发现这个 Thread 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();

从这里开始:以编程方式创建 SQLCE 数据库

我要问的是,这是否适用于任何 PC 以及我必须做的代码才能使用实体框架。我在想类似的东西

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; }
}

但我只是不让它工作。

可能只有连接字符串是错误的,但我如何避免使用它或正确的看起来如何?

请帮忙?

4

1 回答 1

0

尝试在您的启动逻辑中使用它

private static void InitializeDB()
{
   const string connectionString = "Data Source = FooDatabase.sdf; Password = 123";
   Database.DefaultConnectionFactory = new
      SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "", connectionString);
}

看看这个帖子

于 2013-02-06T13:30:39.683 回答