Я только начал входить в EF, и я пытаюсь обвести вокруг него (как правило, достаточно легко). Однако по какой-то причине он фактически не сохраняет результаты, хотя, похоже, он может кэшировать значения за какое-то время, а затем вернуться к предыдущим значениям?Entity Framework на самом деле не сохраняет изменения
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, так Framework 4.
Благодарности, Psy
Это похоже на то, что он должен * сохранить изменения в хранилище данных. Я бы посмотрел на ваш метод обновления (используете ли вы сохраненное proc или другое изменение сопоставления при обновлениях?) И/или транзакционный контекст, чтобы начать вызывать его. –