1

我有 MDF 文件,我将其用作 DB 并使用 Linq-to-SQL 连接到它。

我的连接字符串是:

<add name="TasteTeam.Properties.Settings.TasteDBConnectionString" connectionString="Data Source=(LocalDB)\v11.0; AttachDbFilename=|DataDirectory|\TasteDB.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />

我的问题是,当我运行程序并将数据添加到表中时,它会添加到bin 文件夹中的 MDF 文件中,而不是主 MDF 文件中。

这种情况导致每次我重新启动 myprogram 而不是持久化数据时 MDF 文件为空。

我该怎么做才能使 bin 中的 MDF 和 tmp MDF 文件成为同一个文件(我已经尝试了所有“复制到输出目录”选项,但似乎没有任何帮助)

4

1 回答 1

1

整个AttachDbFileName=方法是有缺陷的——充其量!在 Visual Studio 中运行您的应用程序时,它将围绕.mdf文件进行复制(从您的App_Data目录到输出目录 - 通常.\bin\debug是您的应用程序运行的位置),并且很可能,您的INSERT工作正常 - 但您只是看错了 . mdf文件到底!

如果您想坚持使用这种方法,请尝试在myConnection.Close()调用上设置断点 - 然后.mdf使用 SQL Server Mgmt Studio Express 检查文件 - 我几乎可以肯定您的数据在那里。

我认为真正的解决方案是

  1. 安装 SQL Server Express(反正你已经完成了)

  2. 安装 SQL Server Management Studio Express

  3. 在SSMS Express中创建您的数据库,给它一个逻辑名称(例如TasteDB

  4. 使用它的逻辑数据库名称(在服务器上创建它时给出)连接到它——不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

    Data Source=.\\SQLEXPRESS;Database=TasteDB;Integrated Security=True
    

    其他一切都和以前完全一样...

另请参阅 Aaron Bertrand 的优秀博文 踢坏习惯:使用 AttachDbFileName了解更多背景信息。

于 2016-05-21T14:50:31.693 回答