SQL Server Compact 4.0代码优先,指定了connectionstring

时间:2013-08-16 13:22:12

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

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

以下是我的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

内部异常说

  

配置系统无法初始化

我已经尝试通过构造函数直接指定上下文,但仍然没有运气。希望我只是忽略了一些东西。

(旁注,我抓住了Nuget的EntityFramework,它应该是5.0,但是appconfig说4.4?自动生成效果很好,所以我觉得它们没有任何关系。)

1 个答案:

答案 0 :(得分:2)

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

因此要么指定sdf文件的直接文件路径,要么使用| DataDirectory |

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

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

  var s = AppDomain.CurrentDomain.GetData("DataDirectory");