我对C#比较陌生,对WPF非常陌生。我一直试图把我的头脑围绕着MVVM的概念,现在我已经把ADO实体抛到了一起。
我的示例应用程序的目的是跟踪CAD项目。我正在从数据库中提取项目并成功地填充我的视图;太棒了。我在手工中添加了信息,以测试视图是否正常工作。
现在,我的应用程序试图通过我从ICommand启动的函数添加一个新项。据我所知,我正在创建一个新的DBContext对象,向它添加一个项并保存我的更改。成功地执行"SaveChanges()“可以告诉我1行已经被更新了,但是当我检查时,数据不存在吗?此外,如果我再次调用SaveChanges() (在同一个调试会话中),它会抛出一个错误来指示存在多个条目。同样,当通过“显示表数据”查看数据时,我什么也没看到。
public void AddNewItem(object parameter)
{
using (var dbq = new DBEntities()) {
var tempItem = dbq.OutstandingCAD.Create();
tempItem.Id = 2;
dbq.OutstandingCAD.Add(tempItem);
dbq.SaveChanges();
}
}请有人看看那小块代码,并建议我所做的是否正确,我的问题是否在其他地方?
非常感谢
发布于 2015-03-30 19:45:21
您的问题不在于代码,而在于您试图评估工作的方式。
有一篇微软的文章这里讨论了您正在经历的情况。它引用了Visual 2005,但仍然相关。
基本上,您的数据库是一个存储在项目中的.mdf文件。您的SQL连接字符串类似于AttachDbFileName=|DataDirectory|\data.mdf"。
使用本地数据库文件时要知道的一件事是,它们被视为任何其他内容文件。对于桌面项目,这意味着默认情况下,每次生成项目时,数据库文件将被复制到输出文件夹(又名bin)。在F5之后,下面是磁盘上的样子 MyProject\Data.mdf MyProject\MyApp.vb MyProject\Bin\Debug\Data.mdf MyProject\Bin\Debug\MyApp.exe 在设计时,数据工具使用MyProject\Data.mdf .在运行时,应用程序将使用输出文件夹下的数据库。由于拷贝的结果,很多人认为应用程序没有将数据保存到数据库文件中。事实上,这只是因为所涉及的数据文件有两个副本。在通过数据库资源管理器查看架构/数据时也是如此。这些工具使用的是项目中的副本,而不是bin文件夹中的副本。
实际上,您有两个数据库副本,一个用于设计时,一个用于运行时。您正在查看设计时数据库,而没有看到对运行时数据库所做的更改。但是,每次运行项目时,运行时数据库都会被覆盖,这样您的更改就会消失。这实际上是一个调试特性,可以防止数据库中有数百行代码来自同一特性的多个测试。但是,有些人更喜欢这种持久性,并且会使用外部SQL实例而不是包含.mdf的项目。
https://stackoverflow.com/questions/29354422
复制相似问题