Sql Ce& EF用法(自编码)

时间:2013-01-07 14:02:24

标签: entity-framework ef-code-first sql-server-ce

我有一个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?

1 个答案:

答案 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