【发布时间】:2015-10-27 20:01:46
【问题描述】:
最近开始尝试深入研究实体框架的代码优先方法。我按照各种教程创建了一些数据库表,但它们都没有成功。
现在从头开始大约 3 到 4 次,因为异常变得越来越荒谬。上次在第一次访问时创建了数据库,但由于缺少权限(使用集成安全性 - wat?)而无法在第二次调试会话中连接到数据库。显然 .mdf 被系统进程阻止了,只有在安全模式下重新启动才能让我摆脱它。
无论如何,重新来过。我有一个类库,其中包含数据库模型和用于外部访问的网关类。我有一个控制台项目来测试数据库的创建和访问。 EF通过NuGet安装在类库中,对EntityFramework.SqlServer.dll的引用添加到Console项目中。
两个项目中的连接字符串如下所示:
<connectionStrings>
<add name="DbConnection"
connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\LanguageCreator.mdf;Initial Catalog=LanguageCreator;Integrated Security=SSPI"
providerName="System.Data.SqlClient" />
</connectionStrings>
我的上下文类如下所示:
public class LanguageContext : DbContext {
public LanguageContext() : base("DbConnection") {
// Have to set the DataDirectory in code because the wrong one gets set from the config.
AppDomain.CurrentDomain.SetData("DataDirectory", Directory.GetCurrentDirectory());
Database.SetInitializer(new CreateDatabaseIfNotExists<LanguageContext>());
public DbSet<Language> Languages { get; set; }
public DbSet< ... blablabla various other DbSets following, nothing of interest here.
}
这是我的网关的样子:
public class Gateway {
public void InitializeDatabase() {
using (LanguageContext context = new LanguageContext()) {
context.Database.Initialize(true);
// I did have a configuration class for migration, which seeds some initial data, which is why I'm trying to read the WordTypes here but I left that thing out this time ... will try to add it later on.
IEnumerable<WordType> wordTypes = context.WordTypes.AsEnumerable();
List<Language> languages = context.Languages.ToList();
}
}
}
调用看起来像这样:
class Program {
static void Main(string[] args) {
Gateway databaseGateway = new Gateway();
databaseGateway.InitializeDatabase();
}
}
现在,没有任何特别之处,我在启动调试会话时收到以下错误:
与 SQL Server 建立连接时出现与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:50 - 发生本地数据库运行时错误。无法创建自动实例。有关错误详细信息,请参阅 Windows 应用程序事件日志。
很遗憾,Windows 应用程序事件日志没有显示该错误的任何详细信息。又或者是我太笨了,找不到……
究竟是什么导致了这个问题,我该如何解决这个问题?我发现的一切都是关于访问外部 SQL Server 的,但我只是希望 EF 在本地创建一个 .mdf 并连接到它。
【问题讨论】:
标签: database sql-server-ce code-first entity-framework-6.1 mdf