2010-09-17 68 views
1

我剛剛開始涉足EF,並試圖讓我的頭部圍繞它(通常很簡單)。然而由於某種原因,實際上並沒有保存結果,儘管它似乎可能會緩存一段時間的值,然後回滾到之前的值?實體框架沒有實際保存更改

using (IAPlayerEntities IAPE = new IAPlayerEntities()) { 
       ObjectSet<Player> Players = IAPE.Players; 
       if (Players.Count() > 0) { 
        Player currentPlayer = new Player(); 
        bool LoggedIn = false; 
        Players.DefaultIfEmpty(null); 
        while (!LoggedIn) { 
         Console.WriteLine("Please enter your Username:"); 
         string username = Console.ReadLine(); 
         Console.WriteLine("Please enter your Password:"); 
         string password = MaskLine(); 
         currentPlayer = Players.FirstOrDefault(r => r.Password == password && r.Name == username); 
         LoggedIn = (currentPlayer != null); 
         if (!LoggedIn) { 
          Console.WriteLine("{0}Invalid combination, please try again.", Environment.NewLine); 
         } 
        } 
        Console.WriteLine("{0}Please choose your colony.", Environment.NewLine); 
        foreach (Colony col in currentPlayer.Colonies) { 
         Console.WriteLine(@"{0}{1}:{0}{2}{0}Level {3}", Environment.NewLine, col.ID, col.Name, col.Level); 
        } 
        Console.WriteLine(); 
        int colID = -1; 
        string colStr = Console.ReadLine(); 
        while (!int.TryParse(colStr, out colID) || !currentPlayer.Colonies.Any(e => e.ID == colID)) { 
         if (colStr.ToLower() == "q") { 
          Console.WriteLine("Goodbye!"); 
          return; 
         } 
         Console.WriteLine("{0}Invalid Colony. Please try again.", Environment.NewLine); 
         colStr = Console.ReadLine(); 
        } 
        Console.WriteLine("Please enter a new name for the colony:"); 
        string colName = Console.ReadLine(); 
        bool b = IAPE.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified).Any(); 
        currentPlayer.Colonies.First(e => e.ID == colID).Name = colName; 
        int change = IAPE.SaveChanges(); 
        if (change >= 1) { 
         Console.WriteLine("{0}Colony has been renamed.", Environment.NewLine); 
        } else { 
         Console.WriteLine("{0}Colony could not be renamed.", Environment.NewLine); 
        } 
       } else { 
        Console.WriteLine("No Registered users"); 
       } 
      } 

忽略über安全登錄,它只是在那裏從它得到一個球員實體進行測試。

bool b在保存之前設置爲true,然後如果我使用調試器在「立即窗口」窗格中運行相同的行,則顯示爲false。對我來說,這意味着它保存了嗎?如果我在應用程序關閉後重新運行應用程序,那麼更改的值就位。但最終它會返回到先前的值,如果我在檢查數據庫後仍然顯示原始名稱,那麼我不太確定這裏發生了什麼?

它在VCS2010運行,因此框架4

謝謝,精神科

+2

看起來它*應*保存更改回您的數據存儲。我會看看你的更新方法(你是否使用存儲過程,或其他映射更新更新?)和/或事務上下文,以開始戳它。 – 2010-09-17 16:05:44

回答

2

檢查到數據庫的SQL,經過一番調查後,結果證明我在項目中有一個數據庫的副本,每次重建時都會覆蓋輸出中的數據庫。

+0

有同樣的問題。使用該項目附加數據庫對於部署非常有用,但在調試時不太有用... – 2012-09-26 07:38:39

+0

您是如何解決這個問題的? – Brett 2012-12-30 12:58:04

+0

@Brett我不確定(因爲這是2年前),但可能只是將文件上的構建操作更改爲「無」,而不是「內容」或「複製到輸出」 – Psytronic 2013-01-02 14:04:30

0

IAPE.Savechanges()在某一時刻。