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 内容...你的连接字符串错了,应该是这样的:
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 窗体应用程序
VS2010 windows 应用程序中的 SQL Compact 4 EF 模型