我对C#相对较新,对WPF来说还是新手。我一直在尝试围绕MVVM的概念,现在我已经把ADO Entity抛到了混合体中。
我的示例应用程序的目的是跟踪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();
}
}
有人可以查看一小段代码并建议我所做的是否正确以及我的问题是否存在于其他地方?
非常感谢
答案 0 :(得分:0)
您的问题不在于您的代码,而在于您尝试评估工作的方式。
有一篇Microsoft文章here讨论了您遇到的情况。它引用了Visual Studio 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文件夹中的副本。
基本上,您有2个数据库副本,一个用于设计时,一个用于运行时。您正在查看设计时数据库,而不会看到对运行时数据库所做的更改。但是,每次运行项目时,运行时数据库都会被覆盖,因此可能会显示您的更改消失。这实际上是一个调试功能,可以防止数据库中的数百行来自同一功能的多个测试。但是,有些人更喜欢这种持久性,并且会使用外部SQL实例而不是包含.mdf
的项目。