2017-10-19 299 views
0

我已經建立了我的數據庫與流利NHibernate和SQL Server,它與SQL Server工作正常。每次我執行代碼時,都會創建數據庫結構並插入數據,從而導致應用程序界面完美運行。如果我關閉程序,數據庫和內容將保持保存狀態。流利NHibernate本地mdf文件不保留表結構

我不想在SQL服務器數據庫中,我希望數據庫是在解決方案文件結構的* .mdf文件。所以我可以複製應用程序而無需安裝過程。

的問題,這個話題的原因,就是使用解決方案文件結構中的文件,應用程序的作品完美運行時,但是當我關閉應用程序的數據都沒有了。如果我再次啓動應用程序,我插入的數據就消失了。

我的類是SQL Server中的以下內容:

class NHibernateHelper 
{ 
    private static ISessionFactory _sessionFactory; 

    private static ISessionFactory SessionFactory 
    { 
     get 
     { 
      if (_sessionFactory == null) 
       InitializeSessionFactory(); 

      return _sessionFactory; 
     } 
    } 

    private static void InitializeSessionFactory() 
    { 
     _sessionFactory = Fluently.Configure() 
      .Database(
       MsSqlConfiguration.MsSql2012 
       .ConnectionString(@"server=MyComputer;Database=MyDatabase;Trusted_Connection=true;") 
       .ShowSql()) 
      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyEntity>()) 
      .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(true, true)) 
      .BuildSessionFactory(); 
    } 

    public static ISession OpenSession() 
    { 
     return SessionFactory.OpenSession(); 
    } 
} 

對於本地文件,我只是改變了的ConnectionString行:

.ConnectionString(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="+AppDomain.CurrentDomain.BaseDirectory+ "General\\Data\\MyDatabase.mdf" + ";Integrated Security=True;") 

要提交/持久化數據到數據庫我使用以下結構:

 using (var session = NHibernateHelper.OpenSession()) 
     { 
      using (var transaction = session.BeginTransaction()) 
      { 

       var newEntity = new EntEntity 
       { 
        //Data to populate 

       }; 

       session.SaveOrUpdate(newEntity); 
       transaction.Commit(); 

       if (transaction.WasCommitted) 
       { 
        MessageAndCleanInterface("Sucessful created!"); 
       } 
      } 
     } 

有誰知道爲什麼會發生這種情況? 在這一刻,我不介意使用另一種類型的數據庫類型的,我會開始進行與其他類型的測試。不過,我想知道這個的原因。

+0

您是否使用交易爲您插入? – Rabban

+0

這一行'新SchemaUpdate工具(CFG).Execute(真,真)'的'SessionFactory'創建代碼,你會每次你'創建SessionFactory'時間來得到一個乾淨的架構。你不需要每次都這樣做? –

+0

@Rabban我編輯了我的文章,以更好地回答你的問題。繼續,是的,我在會話對象內部啓動事務,並在最後進行提交。 – Nuno

回答

1

的Visual Studio將覆蓋密度纖維板,每次構建。如果只啓動您的.exe文件而不構建新文件,則應該保留您的數據。