2013-08-16 68 views
2

我有一个简单的控制台应用程序设置,我试图让代码优先的实体正常工作。我已经完成了基本的例子,并设置了我的类和上下文。一旦我运行我的应用程序,数据库会自动生成并放入我的bin/Debug目录中。这很好,至少有一些工作。但是现在我想将SQL Server Compact 4.0数据库文件(.sdf)添加到项目中,并使用该文件代替自动生成的数据库。从我读过的内容中,我只需要添加一个名称与派生的DbContext类匹配的连接字符串。SQL Server Compact 4.0代码优先连接字符串指定

下面是我的app.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
    <add name="StudentContext" 
     connectionString="Data Source=Database1.sdf" 
     providerName="System.Data.SqlServerCe.4.0"/> 
    </connectionStrings> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="System.Data.SqlServerCe.4.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
</configuration> 

这是当它试图使用初始化上下文,我收到错误。

Visual Studio Error

内部异常说

配置系统初始化失败

我试过直接虽然构造函数指定的情况下,仍然没有运气。希望我只是忽略了一些东西。

(侧面说明,我抓住的EntityFramework从的NuGet,它应该是5.0,但了AppConfig说,4.4?的自动生成的伟大工程,所以我想他们没有有什么彼此。)

+0

在.NET 4.0上的EF 5.0将被称为'4.4' - 这里没有错误(只是令人困惑的编号方案....)在.NET 4.5项目中,EF 5.0将为“5.0”。 –

回答

2

问题是我的连接字符串是指向一个不存在的位置。因此,每次运行该程序时,都会自动在bin/debug中创建一个文件。

因此,要么指定一个直接文件路径到sdf文件或使用| DataDirectory |

connectionString="Data Source=|DataDirectory|Database1.sdf" 

然后在您的目录设置为什么高峰。如果它不是你应用程序中的目录,那么你将需要手动改变它。但是网站有一个它应该指向的App_Data目录。

var s = AppDomain.CurrentDomain.GetData("DataDirectory"); 
相关问题