2012-10-23 113 views
3

我试图使用实体框架4为我正在写的小型数据库应用程序保留下载文件的记录。在运行应用程序时,我在.SaveChanges()方法之前设置了tableName.Add()方法之后的断点,并且我可以看到保存到实体中的数据;那么在调用.SaveChanges()方法之后我有另一个断点,并查看数据库以查找没有记录保存到它。我发现了很多类似的问题,但我还没有找到解决我的特定问题的方法。这里是代码:实体框架4 SaveChanges方法不保存到数据库

public void StartNewDownload(string FileID) 
    { 
     DateTime startTime = DateTime.Now; 

     FilesDBEntities db = new FilesDBEntities(); 
     int startedID = (from dr in db.tblDownloadResults 
         where dr.Value.Equals("Started") 
         select dr.ResultID).First(); 
     tblDownloads myDownload = new tblDownloads { FileID = FileID, StartDateTime = startTime, ResultID = startedID }; 
     db.tblDownloads.Add(myDownload); 
     db.SaveChanges(); 
    } 

任何帮助表示赞赏。

谢谢!

+1

如何“查看数据库”?你有没有尝试阅读你的应用程序中的实体?它有用吗?我见过很多情况,那些使用CodeFirst并且在他们改变了某些内容后查看错误数据库的人以及CodeFirst创建了一个保存数据的新数据库。如果你可以阅读你的应用程序中保存的内容,这意味着数据被保存在某处。 – Pawel

+0

Pawel,谢谢你的回复。我可以看到这是一个潜在的原因。将调查并报告。谢谢。 –

+0

你总是可以使用'((IObjectContext)ctx).ObjectContext).Connection.ConnectionString'来获取连接字符串,它会告诉你你打哪个数据库。 – Pawel

回答

5

帕维尔,你指导我在正确的方向。该实体拥有数据,但我正在研究的数据库没有。但在阅读您的评论后,我从Visual Studio运行该程序,并使用Process Monitor监视对* .sdf文件的任何操作。这有助于发现在构建解决方案时,它会为bin \ Debug文件夹创建另一个数据库文件。我忘记数据库构建操作属性被设置为“内容”。

谢谢!

0

您可以使用SQL Server Profiler来查看实体框架是否确实调用了数据库。

(不包括在SQL Server Express的工具)

+0

Edi,感谢您的回复,并抱歉没有提供其他信息。我正在使用SQL Compact而不是SQL Express。 SQL Profiler在这种情况下仍然有用吗? –