指定连接字符串的 SQL Server Compact 4.0 代码优先

Posted

技术标签:

【中文标题】指定连接字符串的 SQL Server Compact 4.0 代码优先【英文标题】:SQL Server Compact 4.0 code-first with connectionstring specified 【发布时间】:2013-08-16 13:22:11 【问题描述】:

我有一个简单的控制台应用程序设置,我正在尝试让代码优先实体正常工作。我已经完成了基本示例并设置了我的类和上下文。一旦我运行我的应用程序,数据库就会自动生成并放置在我的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>  

这是我在尝试使用初始化上下文时收到的错误。

内部异常说

配置系统初始化失败

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

(旁注,我从 Nuget 获取了 EntityFramework,它应该是 5.0,但 appconfig 显示的是 4.4?自动生成效果很好,所以我认为它们之间没有任何关系。)

【问题讨论】:

.NET 4.0 上的 EF 5.0 将被称为 4.4 - 这里没有错(只是令人困惑的编号方案......) EF 5.0 在 .NET 4.5 项目上将是 5.0 【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于指定连接字符串的 SQL Server Compact 4.0 代码优先的主要内容,如果未能解决你的问题,请参考以下文章

应用程序意图 = 只读 SQL Server 连接错误

应用程序意图= readonly SQL Server连接错误

JTDS 与 SQL Server 的连接问题 - 适用于 2000 但不适用于 2005

SQL Server Compact Edition 4.0:错误:26 - 查找指定的服务器/实例时出错

R SQL Server ODBC连接在服务器名称中转义字符

Jetbrains Datagrip 在没有指定数据库的情况下无法连接 sql server