C# 实体框架没有实际保存更改

C# 实体框架没有实际保存更改,c#,entity-framework,C#,Entity Framework,我刚刚开始涉足英孚,我正试着让我的头脑绕过它(通常很容易)。然而,出于某种原因,它实际上并没有保存结果,尽管它似乎可能会将值缓存一段时间,然后回滚到以前的值 using (IAPlayerEntities IAPE = new IAPlayerEntities()) { ObjectSet<Player> Players = IAPE.Players; if (Players.Count() > 0) {

我刚刚开始涉足英孚,我正试着让我的头脑绕过它(通常很容易)。然而,出于某种原因,它实际上并没有保存结果,尽管它似乎可能会将值缓存一段时间,然后回滚到以前的值

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");
                }
            }
使用(IAPlayerEntities IAPE=new IAPlayerEntities()){
ObjectSet Players=IAPE.Players;
如果(Players.Count()>0){
Player currentPlayer=新玩家();
bool LoggedIn=false;
Players.DefaultIfEmpty(null);
而(!LoggedIn){
Console.WriteLine(“请输入您的用户名:”);
字符串username=Console.ReadLine();
Console.WriteLine(“请输入您的密码:”);
字符串密码=MaskLine();
currentPlayer=Players.FirstOrDefault(r=>r.Password==密码&r.Name==用户名);
LoggedIn=(currentPlayer!=null);
如果(!LoggedIn){
Console.WriteLine(“{0}无效组合,请重试。”,Environment.NewLine);
}
}
Console.WriteLine(“{0}请选择您的殖民地。”,Environment.NewLine);
foreach(currentPlayer.colons中的殖民地列){
Console.WriteLine(@“{0}{1}:{0}{2}{0}Level{3}”,Environment.NewLine,col.ID,col.Name,col.Level);
}
Console.WriteLine();
int colID=-1;
字符串colStr=Console.ReadLine();
而(!int.TryParse(colStr,out colID)| |!currentPlayer.colons.Any(e=>e.ID==colID)){
if(colStr.ToLower()=“q”){
控制台。WriteLine(“再见!”);
返回;
}
Console.WriteLine(“{0}无效的殖民地。请重试。”,Environment.NewLine);
colStr=Console.ReadLine();
}
WriteLine(“请为殖民地输入一个新名称:”);
字符串colName=Console.ReadLine();
bool b=IAPE.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified).Any();
currentPlayer.colons.First(e=>e.ID==colID).Name=colName;
int change=IAPE.SaveChanges();
如果(更改>=1){
WriteLine(“{0}殖民地已被重命名。”,Environment.NewLine);
}否则{
Console.WriteLine(“{0}无法重命名。”,Environment.NewLine);
}
}否则{
Console.WriteLine(“无注册用户”);
}
}
忽略über安全登录,它只是为了从中获取玩家实体进行测试

bool b在保存之前设置为true,然后如果我使用调试器在“立即窗口”窗格中运行同一行,那么它将显示false。对我来说,这意味着它得救了?如果我在应用程序关闭后重新运行它,那么更改后的值就就位了。但最终它会返回到以前的值,如果我在数据库显示原始名称之后直接检查它,那么我不太确定这里发生了什么

它在VCS2010上运行,所以框架4


谢谢,Psy

IAPE.Savechanges()在某个时候。

检查了数据库的SQL,经过一些调查后,发现我在项目中有一个数据库副本,每次重建它时它都在输出中。

看起来它应该将更改保存回数据存储。我会看看你的更新方法(你是在使用存储过程,还是在更新时使用其他映射更改?)和/或事务上下文来开始戳它。有同样的问题。在项目中附加一个DB很适合部署,但在调试时不是很有用…@Brett我不记得很清楚(因为两年前),但可能只是将文件上的构建操作更改为“无”,而不是“内容”或“复制到输出”,谢谢@Psytronic,最后我在这里作为一个单独的问题发帖:在浏览了很多网站之后,我找到了自己的答案。