【问题标题】:MDF table content is deleted when starting application from within VS从 VS 中启动应用程序时,MDF 表内容被删除
【发布时间】:2014-09-19 10:40:06
【问题描述】:

这里有一个非常神秘的问题。

我的项目中有单表的 mdf 文件(双击会显示这个):

CREATE TABLE [dbo].[Table] (
    [Id]      DATETIME        NOT NULL,
    [Version] NCHAR (20)      NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

然后我添加dbml(Linq-to-SQL),将表格拖到那里,添加一些代码

partial class TestDataContext
{
    public static string DatabaseFile { get; private set; }
    public static string ConnectionString { get; private set; }

    static TestDataContext()
    {
        DatabaseFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Test.mdf");
        ConnectionString = string.Format(@"Data Source=(LocalDB)\v11.0;AttachDbFilename={0};Integrated Security=True", DatabaseFile);
    }

    public TestDataContext Attach()
    {
        Detach();
        var context = new TestDataContext(ConnectionString);
        // re-create database
        if (!context.DatabaseExists() && !File.Exists(DatabaseFile))
            context.CreateDatabase();
        return context;
    }

    public static void Detach()
    {
        try
        {
            using (var master = new DataContext(@"Data Source=(LocalDB)\v11.0;Initial Catalog=master;Integrated Security=True"))
            {
                master.ExecuteCommand(string.Format(@"ALTER DATABASE [{0}] SET OFFLINE WITH ROLLBACK IMMEDIATE", DatabaseFile));
                master.ExecuteCommand(string.Format(@"exec sp_detach_db '{0}'", DatabaseFile));
            }
        }
        catch { } // should be safe
    }

    public void Test()
    {
        var row = new Table() { Id = DateTime.Now, Version = "test1.0" };
        Tables.InsertOnSubmit(row);
        System.Threading.Thread.Sleep(5);
        row = new Table() { Id = DateTime.Now, Version = "test1.1" };
        Tables.InsertOnSubmit(row);
        SubmitChanges();
    }
}

如果文件被删除,则需要分离数据库并重新创建数据库(可能与问题有关,请参阅更多内容)。 new 数据库是在 exe 文件附近创建的(不要与项目中的一个混合,仅用于定义结构和生成 dmbl)。

现在的问题是:当我在 VS (F5) 中运行应用程序时,该表总是空白。即使在调用Attach() 之前,它之前运行的内容也会被删除!看起来如果 VS 打开 new mdf 文件,在那里找到我的表(大声笑)并清除它!

最令人困惑的部分:如果编译后的 exe 文件直接运行,那么内容会在启动之间持续存在(如预期的那样)。一旦我在 VS 中按下 F5 .. 它就会再次变为空。

有什么想法吗?


我在 VS“数据库资源管理器”中打开那个 new mdf 文件,以便能够看到发生了什么。应用程序通过调用Test() 添加了一些行,我在应用程序和资源管理器中看到了这一点。然后应用程序退出。数据还在。是的,我单击刷新按钮,它仍然是。然后我点击 F5 并在按下调用 Attach() 的按钮之前切换到资源管理器并点击刷新.. 表是空的。

【问题讨论】:

    标签: c# sql visual-studio-2013 mdf


    【解决方案1】:

    您的解决方案中是否包含 MDF 文件?检查“复制到输出目录”的文件属性。它应该在“请勿复制”

    【讨论】:

    • 案例,谢谢! (之前的评论是我的错误,因为我打开了 2 个项目:原始和测试,在这里发布,检查错误)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多