同一 MDF 文件的 C# 2 版本

C# 2 versions of same MDF file

我有 MDF 文件,我将其用作数据库并使用 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" />

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

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

我该怎么做才能使 bin 中的 MDF 和 tmp MDF 文件成为同一个文件 (我已经尝试了所有 "copy to output directory" 选项,但似乎没有任何帮助)

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

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

我认为真正的解决方案

  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 的精彩博客 post Bad habits to kick: using AttachDbFileName 了解更多背景信息。