2014-09-19 2 views
0

Очень загадочная проблема здесь.Содержимое таблицы MDF удаляется при запуске приложения из VS

Я МДФ- файл в проекте с одним столом (двойной щелчок покажет это):

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

Затем добавить DBML (Linq к 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(); 
    } 
} 

Это необходимо для отсоединения базы данных и воссоздания базы данных, если файл удален (возможно, это связано с проблемой, см. Далее). Это новая база данных создается около exe-файла (не смешивайте его с одним в проекте, используемым только для определения структуры и генерации dmbl).

Теперь проблема: когда я запускаю приложение из VS (F5), то эта таблица всегда пустой. Даже до звонка Attach() его содержимое из предыдущего запуска стирается! Похоже, если VS откроет новый mdf-файл, найдите мой стол там (lol) и очистите его!

Самая запутанная часть: если скомпилированный exe-файл работает напрямую, то контент сохраняется между запусками (по назначению). Как только я ударил F5 в VS, он снова станет пустым.

Любая идея?


открываю что новый мдф-файл в VS «Database Explorer», чтобы быть в состоянии увидеть, что происходит. Приложение добавляет несколько строк, вызывая Test(), и я вижу это в приложении и в проводнике. Затем приложение завершает работу. Данные по-прежнему. Да, я нажимаю кнопку обновления, это все равно. Затем я ударил F5 и до нажатия кнопки, вызывающей Attach(). Перейдите в проводник и нажмите «Обновить» там. Таблица пуста.

ответ

1

Является ли файл MDF в вашем решении? Проверьте свойства файла для «Копировать в выходной каталог». Он должен быть включен «Не копировать»

+0

Корпус, спасибо! (предыдущий комментарий был моей ошибкой, так как у меня было открыто 2 проекта: оригинал и тест, для отправки здесь, проверено неправильно). – Sinatr