用于 Entity Framework Code First 的 SQL Server Express 连接字符串

39

我正在使用Visual Web Developer 2010 Express,并使用Entity Framework的Code-First CTP。我能够使用新的SQL Server CE进行操作,但是我无法找到可以与SQL Server Express配合使用的连接字符串。

使用SQL Server CE beta版本时,这个工作得很好(在模型更改时创建和重新创建数据库)。

<add name="TrempimModel"
     connectionString="data source=|DataDirectory|TrempimModel.sdf"
     providerName="System.Data.SqlServerCe.4.0" />

这个连接字符串是我从aspnetdb中复制的。

<add name="TrempimModel"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;
     AttachDBFilename=|DataDirectory|TrempimModel.mdf;User Instance=true"
     providerName="System.Data.SqlClient" />

启动时会出现以下消息:

无法完成操作。提供的 SqlConnection 没有指定初始化目录

那么如何让它与 SQL Server Express 一起工作呢?

1个回答

62
你的连接字符串有问题,具体原因是:
<add name="TrempimModel"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;
                       AttachDBFilename=|DataDirectory|aspnetdb.sdf;
                       User Instance=true"
     providerName="System.Data.SqlClient" />

你基本上是在定义你要连接的“服务器”,但是你没有指定要连接到文件中的哪个数据库。 另外 - SQL Server Express数据库文件的文件扩展名是.mdf(而不是.sdf - 那是SQL Server Compact Edition)- 你也需要考虑到这一点! (根据OP的评论,这是一个打字错误)。

你需要在连接字符串中定义一个额外的database=.... (或者 Initial Catalog=.....):

<add name="TrempimModel"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;
                       database=YourDatabaseName;
                       AttachDBFilename=|DataDirectory|aspnetdb.mdf;
                       User Instance=true"
     providerName="System.Data.SqlClient" />

那么它应该可以很好地工作。

欲了解更多背景知识和大量示例,请访问ConnectionStrings网站。


sdf扩展名是一个打字错误。我在连接字符串中使用了mdf - 编辑了问题以反映这一点。指定数据库的建议解决了我的问题 - 谢谢。我正在使用与文件名相同的名称 - 这样做是否正确或会在以后引起问题? - GilShalit
@GilShalit:这取决于你的MDF文件中的数据库实际名称是什么;很有可能与文件名相同。您需要通过将MDF附加到完整的SQL Server实例并查看存储在MDF内部的数据库的实际名称来验证这一点。 - marc_s
由于您似乎对此非常了解,我不知道您是否有时间看一下我的问题...我可以让连接字符串工作,但是如果我尝试编辑/使用数据库,就会出现很多错误:( - https://dev59.com/nFbUa4cB1Zd3GeqPDfVn 并重新发布到 MSDN - http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/1ec3ff63-d8a1-4844-942d-c2c05ed8078e - Wil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接