我有一个简单的控制台应用程序设置,我试图让代码优先实体正常工作。我已经完成了基本的例子,并设置了我的类和上下文。运行应用程序后,数据库将自动生成并放在我的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?自动生成效果很好,所以我觉得它们没有任何关系。)
答案 0 :(得分:2)
问题出在我的连接字符串中,我指的是一个不存在的位置。因此,每次运行程序时,它都会自动在bin / debug中创建一个文件。
因此要么指定sdf文件的直接文件路径,要么使用| DataDirectory |
connectionString="Data Source=|DataDirectory|Database1.sdf"
然后在目录设置的位置达到峰值。如果它不是您的应用程序中的目录,那么您将需要手动更改它。但网站有一个应该指向的App_Data目录。
var s = AppDomain.CurrentDomain.GetData("DataDirectory");