连接字符串EF 4.1代码首先在Windows窗体应用程序中使用SQL compact

时间:2011-07-15 09:39:35

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

我创建了一个Windows窗体应用程序:

  1. 具有多种窗体形式的演示文稿库
  2. 具有数据层的类库
  3. 用于访问数据库的类库
  4. 我正在使用EntityFramework 4.1和Code First Approach以及SQL Compact 4.0数据库。

    我在用于连接数据库的类库项目的app.config文件中创建了一个连接字符串。问题是连接字符串显然对数据库创建没有影响。我的意思是所有程序都能正常运行,但即使我为数据库指定了一个位置,这也没有任何效果!

    我是否在正确的app.config中写作? 我是否需要以特定方式初始化我的DbContext类? (今天我没有在构造函数中传递任何连接字符串)

    DbContext类:

    public class MyDB : DbContext
    {
        public DbSet<ContactPerson> ContactPersons { get; set; }
    
        public DbSet<Customer> Customers { get; set; }
    
        public DbSet<Project> Projects { get; set; }
    
        public DbSet<Quotation> Quotations { get; set; }
    
        public MyDB()
        : base("MyDatabase")
        {
    
        }
    }
    

    App.config连接字符串:

    <add name="MyDatabase" connectionString="Data Source=MyDB.sdf" 
    providerName="System.Data.SqlServerCE.4.0">
    

3 个答案:

答案 0 :(得分:6)

您需要将app.config放在应用程序(.exe)项目中。 app.config文件应该在这篇博客文章中(区分大小写):http://erikej.blogspot.com/2011/04/saving-images-to-sql-server-compact.html,名称应该是MyDB,而不是MyDatabase ......

答案 1 :(得分:0)

您的连接字符串错误,应该是:

add name =“MyDB”connectionString =“Data Source = MyDB.sdf”providerName =“System.Data.SqlServerCE.4.0”

请注意,Name必须与您的上下文类的名称匹配才能自动检测连接。

答案 2 :(得分:0)

您是否尝试过种植数据库?您必须注入一些数据,以便EF创建数据库,如果您不这样做,模型定义就像意图声明。

public class ContextInitializer : DropCreateDatabaseIfModelChanges<DBContext>
{
    protected override void Seed(DBContext context)    
    {
        context.Add(new Customers()); //add a Customer, for example
    }
}

然后查看Debug / Release文件夹并检查数据库是否正确创建。

微软有一篇文章更详细地解释了所有这些过程,他们有一个新的教程取代了“Magic Unicorn”教程,请参阅http://msdn.microsoft.com/en-US/data/jj193542