Windows窗体应用程序中的连接字符串EF 4.1代码优先SQL紧凑

Posted

技术标签:

【中文标题】Windows窗体应用程序中的连接字符串EF 4.1代码优先SQL紧凑【英文标题】:Connection string EF 4.1 code first SQL compact in windows form application 【发布时间】:2011-07-15 09:39:34 【问题描述】:

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

    具有多个窗体的演示库 带有数据层的类库 访问数据库的类库

我将 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">

【问题讨论】:

我刚刚注意到应用程序正在 SQL Server Express 中而不是在文件中创建数据库。为什么会这样? 【参考方案1】:

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

【讨论】:

我做到了,但它没有创建任何实际的数据库文件。我试图在文件夹中搜索数据库,但没有任何结果 数据库实际上是在SQL server express中创建的! 我尝试了一切都没有结果! app.config 被标记为“始终复制”,它出现在 bin\debug 文件夹中。但是没有创建 sdf 文件 构建操作应该是无并且不要复制。您能否向我们展示您的 app.config 内容... 【参考方案2】:

你的连接字符串错了,应该是这样的:

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

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

【讨论】:

其实providerName应该是:providerName="System.Data.SqlServerCe.4.0"【参考方案3】:

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

public class ContextInitializer : DropCreateDatabaseIfModelChanges<DBContext>

    protected override void Seed(DBContext context)    
    
        context.Add(new Customers()); //add a Customer, for example
    

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

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

【讨论】:

以上是关于Windows窗体应用程序中的连接字符串EF 4.1代码优先SQL紧凑的主要内容,如果未能解决你的问题,请参考以下文章

app.config 文件中的多个 SQL Server 连接字符串

将字符串从控制台应用程序发送到 Windows 窗体应用程序

从 Windows 窗体中的数据连接自动生成控件

VS2010 windows 应用程序中的 SQL Compact 4 EF 模型

C# Windows窗体应用程序自动执行(2021.6.4)

Windows 窗体中的类名